This project has retired. For details please refer to its
Attic page.
001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.oozie.workflow;
019
020 import org.apache.hadoop.conf.Configuration;
021 import org.apache.oozie.workflow.lite.NodeDef;
022
023 import java.util.Map;
024
025 /**
026 * A workflow instance is an executable instance of a {@link WorkflowApp}.
027 */
028 public interface WorkflowInstance {
029
030 /**
031 * Separator to qualify variables belonging to a node. <p/> Variables names should be compossed as <code>nodeName +
032 * {@link #NODE_VAR_SEPARATOR} + varName</code>.
033 */
034 public final static String NODE_VAR_SEPARATOR = "#";
035
036 /**
037 * Defines the possible stati of a {@link WorkflowInstance}.
038 */
039 public static enum Status {
040 PREP(false),
041 RUNNING(false),
042 SUSPENDED(false),
043 SUCCEEDED(true),
044 FAILED(true),
045 KILLED(true);
046
047 private boolean isEndState;
048
049 private Status(boolean isEndState) {
050 this.isEndState = isEndState;
051 }
052
053 /**
054 * Return if the status if an end state (it cannot change anymore).
055 *
056 * @return if the status if an end state (it cannot change anymore).
057 */
058 public boolean isEndState() {
059 return isEndState;
060 }
061
062 }
063
064 /**
065 * Return the configuration of the instance.
066 *
067 * @return the configuration of the instance.
068 */
069 public Configuration getConf();
070
071 /**
072 * Return the ID of the instance.
073 *
074 * @return the ID of the instance.
075 */
076 public String getId();
077
078 /**
079 * Return the workflow application that defines the instance.
080 *
081 * @return the workflow application that defines the instance.
082 */
083 public WorkflowApp getApp();
084
085 /**
086 * Start the instance.
087 *
088 * @throws WorkflowException thrown if the instance could not be started.
089 */
090 public boolean start() throws WorkflowException;
091
092 /**
093 * Signal the instance that a node has completed.
094 *
095 * @param path execution path of the node that has completed.
096 * @param signaValue signal value for the node.
097 * @return <code>true</code> if the instance has completed its execution, <code>false</code> otherwise.
098 */
099 public boolean signal(String path, String signaValue) throws WorkflowException;
100
101 /**
102 * Fail the instance. <p/> All executing nodes will be be signaled for fail.
103 *
104 * @param nodeName the name of the node to be failed.
105 * @throws WorkflowException thrown if the instance could not be failed.
106 */
107 public void fail(String nodeName) throws WorkflowException;
108
109 /**
110 * Kill the instance. <p/> All executing nodes will be be signaled for kill.
111 *
112 * @throws WorkflowException thrown if the instance could not be killed.
113 */
114 public void kill() throws WorkflowException;
115
116 /**
117 * Suspend the instance.
118 *
119 * @throws WorkflowException thrown if the instance could not be suspended.
120 */
121 public void suspend() throws WorkflowException;
122
123 /**
124 * Resume the instance.
125 *
126 * @throws WorkflowException thrown if the instance could not be resume.
127 */
128 public void resume() throws WorkflowException;
129
130 /**
131 * Return the current status of the instance.
132 *
133 * @return the current status of the instance.
134 */
135 public Status getStatus();
136
137 /**
138 * Set a variable in the context of the instance. <p/> Variables are persisted with the instance.
139 *
140 * @param name variable name.
141 * @param value variable value, setting a <code>null</code> value removes the variable.
142 */
143 public void setVar(String name, String value);
144
145 /**
146 * Return a variable from the context of the instance.
147 *
148 * @param name name of the variable.
149 * @return variable value, <code>null</code> if the variable is not in the context.
150 */
151 public String getVar(String name);
152
153 /**
154 * Return a map with all the variables in the context of the instance.
155 *
156 * @return a map with all the variables in the context of the instance.
157 */
158 public Map<String, String> getAllVars();
159
160 /**
161 * Add a set of variables in the context of the instance. <p/> Variables are persisted with the instance.
162 *
163 * @param varMap map with the variables to add.
164 */
165 public void setAllVars(Map<String, String> varMap);
166
167 /**
168 * Set a transient variable in the context of the instance. <p/> Transient variables are not persisted with the
169 * instance.
170 *
171 * @param name transient variable name.
172 * @param value transient variable value, setting a <code>null</code> value removes the variable.
173 */
174 public void setTransientVar(String name, Object value);
175
176 /**
177 * Return a transient variable from the context of the instance.
178 *
179 * @param name name of the transient variable.
180 * @return transient variable value, <code>null</code> if the variable is not in the context.
181 */
182 public Object getTransientVar(String name);
183
184 /**
185 * Return the transition a node did. <p/> This is meaninful only for action and decision nodes.
186 *
187 * @param node the node name.
188 * @return the transition the node did, <code>null</code> if the node didn't execute yet.
189 */
190 public String getTransition(String node);
191
192 /**
193 * Get NodeDef from workflow instance
194 * @param executionPath execution path
195 * @return node def
196 */
197 public NodeDef getNodeDef(String executionPath);
198
199 }