001/* 002 * Copyright (c) 2016-2017 Chris K Wensel <chris@wensel.net>. All Rights Reserved. 003 * Copyright (c) 2007-2017 Xplenty, Inc. All Rights Reserved. 004 * 005 * Project and contact information: http://www.cascading.org/ 006 * 007 * This file is part of the Cascading project. 008 * 009 * Licensed under the Apache License, Version 2.0 (the "License"); 010 * you may not use this file except in compliance with the License. 011 * You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, software 016 * distributed under the License is distributed on an "AS IS" BASIS, 017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 018 * See the License for the specific language governing permissions and 019 * limitations under the License. 020 */ 021 022package cascading.flow.local.planner; 023 024import java.io.IOException; 025import java.util.Properties; 026import java.util.concurrent.ExecutorService; 027import java.util.concurrent.Executors; 028import java.util.concurrent.Future; 029 030import cascading.flow.local.LocalFlowProcess; 031import cascading.flow.local.LocalFlowStep; 032import cascading.flow.planner.FlowStepJob; 033import cascading.management.state.ClientState; 034import cascading.stats.FlowNodeStats; 035import cascading.stats.FlowStepStats; 036import cascading.stats.local.LocalStepStats; 037 038/** 039 * 040 */ 041public class LocalFlowStepJob extends FlowStepJob<Properties> 042 { 043 private final LocalStepRunner stackRunner; 044 private Future<Throwable> future; 045 046 public LocalFlowStepJob( ClientState clientState, LocalFlowProcess flowProcess, LocalFlowStep flowStep ) 047 { 048 super( clientState, flowStep.getConfig(), flowStep, 200, 1000, 1000 * 60 ); 049 flowProcess.setStepStats( (LocalStepStats) this.flowStepStats ); 050 this.stackRunner = new LocalStepRunner( flowProcess, flowStep ); 051 } 052 053 @Override 054 protected FlowStepStats createStepStats( ClientState clientState ) 055 { 056 return new LocalStepStats( flowStep, clientState ); 057 } 058 059 @Override 060 protected boolean isRemoteExecution() 061 { 062 return false; 063 } 064 065 @Override 066 protected String internalJobId() 067 { 068 return "flow"; 069 } 070 071 @Override 072 protected void internalNonBlockingStart() throws IOException 073 { 074 ExecutorService executors = Executors.newFixedThreadPool( 1 ); 075 076 future = executors.submit( stackRunner ); 077 078 executors.shutdown(); 079 } 080 081 @Override 082 protected void updateNodeStatus( FlowNodeStats flowNodeStats ) 083 { 084 } 085 086 @Override 087 protected boolean internalIsStartedRunning() 088 { 089 return future != null; 090 } 091 092 @Override 093 protected boolean internalNonBlockingIsComplete() throws IOException 094 { 095 return stackRunner.isCompleted(); 096 } 097 098 @Override 099 protected Throwable getThrowable() 100 { 101 return stackRunner.getThrowable(); 102 } 103 104 @Override 105 protected boolean internalNonBlockingIsSuccessful() throws IOException 106 { 107 return stackRunner.isSuccessful(); 108 } 109 110 @Override 111 protected void internalBlockOnStop() throws IOException 112 { 113 stackRunner.blockUntilStopped(); 114 } 115 116 @Override 117 protected void dumpDebugInfo() 118 { 119 } 120 }