001/* 002 * Copyright (c) 2007-2016 Concurrent, Inc. All Rights Reserved. 003 * 004 * Project and contact information: http://www.cascading.org/ 005 * 006 * This file is part of the Cascading project. 007 * 008 * Licensed under the Apache License, Version 2.0 (the "License"); 009 * you may not use this file except in compliance with the License. 010 * You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, software 015 * distributed under the License is distributed on an "AS IS" BASIS, 016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017 * See the License for the specific language governing permissions and 018 * limitations under the License. 019 */ 020 021package cascading.flow; 022 023import java.util.Map; 024import java.util.Set; 025 026import cascading.flow.planner.process.FlowNodeGraph; 027import cascading.flow.planner.process.ProcessModel; 028import cascading.pipe.Group; 029import cascading.stats.FlowStepStats; 030import cascading.tap.Tap; 031 032/** 033 * Class FlowStep is an internal representation of a given "job" possibly to be executed on a remote cluster. During 034 * planning, pipe assemblies are broken down into "steps" and encapsulated in this class. 035 * <p/> 036 * FlowSteps are submitted in order of dependency. If two or more steps do not share the same dependencies and all 037 * can be scheduled simultaneously, the {@link #getSubmitPriority()} value determines the order in which 038 * all steps will be submitted for execution. The default submit priority is 5. 039 */ 040public interface FlowStep<Config> extends ProcessModel 041 { 042 String CASCADING_FLOW_STEP_ID = "cascading.flow.step.id"; 043 044 /** 045 * Method getId returns the id of this FlowStep object. 046 * 047 * @return the id (type int) of this FlowStep object. 048 */ 049 String getID(); 050 051 int getOrdinal(); 052 053 /** 054 * Method getName returns the name of this FlowStep object. 055 * 056 * @return the name (type String) of this FlowStep object. 057 */ 058 String getName(); 059 060 /** 061 * Returns an immutable map of properties giving more details about the FlowStep object. 062 * <p/> 063 * FlowStep descriptions provide meta-data to monitoring systems describing the workload a given FlowStep represents. 064 * For known description types, see {@link FlowStepDescriptors}. 065 * 066 * @return Map<String,String> 067 */ 068 Map<String, String> getFlowStepDescriptor(); 069 070 Flow<Config> getFlow(); 071 072 String getFlowID(); 073 074 /** 075 * Method getParentFlowName returns the parentFlowName of this FlowStep object. 076 * 077 * @return the parentFlowName (type Flow) of this FlowStep object. 078 */ 079 String getFlowName(); 080 081 /** 082 * Method getConfig returns the current initialized configuration. 083 * <p/> 084 * The returned configuration is mutable and may be changed prior to this step being started 085 * or submitted. 086 * 087 * @return the current initialized configuration 088 */ 089 Config getConfig(); 090 091 /** 092 * Method getConfigAsProperties converts the internal configuration object into a {@link java.util.Map} of 093 * key value pairs. 094 * 095 * @return a Map of key/value pairs, may return an empty collection if unsupported 096 */ 097 Map<Object, Object> getConfigAsProperties(); 098 099 /** 100 * Method getStepDisplayName returns the stepDisplayName of this FlowStep object. 101 * 102 * @return the stepName (type String) of this FlowStep object. 103 */ 104 String getStepDisplayName(); 105 106 /** 107 * Method getSubmitPriority returns the submitPriority of this FlowStep object. 108 * <p/> 109 * 10 is lowest, 1 is the highest, 5 is the default. 110 * 111 * @return the submitPriority (type int) of this FlowStep object. 112 */ 113 int getSubmitPriority(); 114 115 /** 116 * Method setSubmitPriority sets the submitPriority of this FlowStep object. 117 * <p/> 118 * 10 is lowest, 1 is the highest, 5 is the default. 119 * 120 * @param submitPriority the submitPriority of this FlowStep object. 121 */ 122 void setSubmitPriority( int submitPriority ); 123 124 FlowNodeGraph getFlowNodeGraph(); 125 126 int getNumFlowNodes(); 127 128 Group getGroup(); 129 130 Tap getSink(); 131 132 Set<String> getSourceName( Tap source ); 133 134 Set<String> getSinkName( Tap sink ); 135 136 Tap getSourceWith( String identifier ); 137 138 Tap getSinkWith( String identifier ); 139 140 Set<Tap> getTraps(); 141 142 Tap getTrap( String name ); 143 144 /** 145 * Returns true if this FlowStep contains a pipe/branch with the given name. 146 * 147 * @param pipeName the name of the Pipe 148 * @return a boolean 149 */ 150 boolean containsPipeNamed( String pipeName ); 151 152 void setFlowStepStats( FlowStepStats flowStepStats ); 153 154 FlowStepStats getFlowStepStats(); 155 156 /** 157 * Method hasListeners returns true if {@link FlowStepListener} instances have been registered. 158 * 159 * @return boolean 160 */ 161 boolean hasListeners(); 162 163 /** 164 * Method addListener registers the given {@link FlowStepListener} with this instance. 165 * 166 * @param flowStepListener of type flowStepListener 167 */ 168 void addListener( FlowStepListener flowStepListener ); 169 170 /** 171 * Method removeListener removes the given flowStepListener from this instance. 172 * 173 * @param flowStepListener of type FlowStepListener 174 * @return true if the listener was removed 175 */ 176 boolean removeListener( FlowStepListener flowStepListener ); 177 }