You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@falcon.apache.org by pa...@apache.org on 2016/01/06 11:53:17 UTC

[4/9] falcon git commit: FALCON-1674 Fix the mapping of InstanceState status to workflow Status in InstancesResult. Contributed by Pallavi Rao.

FALCON-1674 Fix the mapping of InstanceState status to workflow Status in InstancesResult. Contributed by Pallavi Rao.


Project: http://git-wip-us.apache.org/repos/asf/falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/falcon/commit/679167a2
Tree: http://git-wip-us.apache.org/repos/asf/falcon/tree/679167a2
Diff: http://git-wip-us.apache.org/repos/asf/falcon/diff/679167a2

Branch: refs/heads/0.9
Commit: 679167a24508994c5b4128162f856c2385de0df2
Parents: 1e3dcb7
Author: Ajay Yadava <aj...@gmail.com>
Authored: Tue Jan 5 13:44:03 2016 +0530
Committer: Ajay Yadava <aj...@gmail.com>
Committed: Tue Jan 5 13:44:03 2016 +0530

----------------------------------------------------------------------
 CHANGES.txt                                     |  2 +
 docs/src/site/twiki/restapi/InstanceList.twiki  | 10 ++++
 .../workflow/engine/OozieWorkflowEngine.java    |  5 +-
 .../workflow/engine/FalconWorkflowEngine.java   | 49 ++++++++++++++++----
 4 files changed, 56 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/falcon/blob/679167a2/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 9c59ed6..1d3aa02 100755
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -90,6 +90,8 @@ Proposed Release Version: 0.9
   OPTIMIZATIONS
 
   BUG FIXES
+    FALCON-1674 Fix the mapping of InstanceState status to workflow Status in InstancesResult (Pallavi Rao via Ajay Yadava)
+
     FALCON-1709 FIFO order is not followed when scheduled using native scheduler (Pallavi Rao)
 
     FALCON-1711 DependencyInstance twiki does not contain correct documentation	(Praveen Adlakha via Pallavi Rao)

http://git-wip-us.apache.org/repos/asf/falcon/blob/679167a2/docs/src/site/twiki/restapi/InstanceList.twiki
----------------------------------------------------------------------
diff --git a/docs/src/site/twiki/restapi/InstanceList.twiki b/docs/src/site/twiki/restapi/InstanceList.twiki
index 229d6f9..5dee8a5 100644
--- a/docs/src/site/twiki/restapi/InstanceList.twiki
+++ b/docs/src/site/twiki/restapi/InstanceList.twiki
@@ -29,6 +29,16 @@ Get list of all instances of a given entity.
 ---++ Results
 List of instances of given entity.
 
+The possible instance status returned and its meaning are as follows:
+   * WAITING - The instance is waiting for the corresponding data(feed) instances to become available.
+   * READY - The instance is ready to be scheduled. But, is waiting for scheduling conditions to be met. For example, limitation on number of instances that can be run in parallel.
+   * RUNNING - The instance is running on the workflow engine.
+   * FAILED - The instance has failed during execution.
+   * KILLED - The instance has been killed either manually or by the system.
+   * SUCCEEDED - The instance has executed successfully.
+   * SKIPPED - This instance was not executed, but was skipped. For example, when the execution order is LAST_ONLY, the older instances are skipped.
+   * ERROR - There was error while executing this instance on the workflow engine.
+   * UNDEFINED - The status of the instance could not be determined.
 ---++ Examples
 ---+++ Rest Call
 <verbatim>

http://git-wip-us.apache.org/repos/asf/falcon/blob/679167a2/oozie/src/main/java/org/apache/falcon/workflow/engine/OozieWorkflowEngine.java
----------------------------------------------------------------------
diff --git a/oozie/src/main/java/org/apache/falcon/workflow/engine/OozieWorkflowEngine.java b/oozie/src/main/java/org/apache/falcon/workflow/engine/OozieWorkflowEngine.java
index b486357..cf0e30d 100644
--- a/oozie/src/main/java/org/apache/falcon/workflow/engine/OozieWorkflowEngine.java
+++ b/oozie/src/main/java/org/apache/falcon/workflow/engine/OozieWorkflowEngine.java
@@ -953,8 +953,9 @@ public class OozieWorkflowEngine extends AbstractWorkflowEngine {
     }
 
     private String mapActionStatus(String status) {
-        if (CoordinatorAction.Status.READY.toString().equals(status)
-            || CoordinatorAction.Status.WAITING.toString().equals(status)
+        if (CoordinatorAction.Status.READY.toString().equals(status)) {
+            return InstancesResult.WorkflowStatus.READY.name();
+        } else if (CoordinatorAction.Status.WAITING.toString().equals(status)
             || CoordinatorAction.Status.SUBMITTED.toString().equals(status)) {
             return InstancesResult.WorkflowStatus.WAITING.name();
         } else if (CoordinatorAction.Status.IGNORED.toString().equals(status)) {

http://git-wip-us.apache.org/repos/asf/falcon/blob/679167a2/scheduler/src/main/java/org/apache/falcon/workflow/engine/FalconWorkflowEngine.java
----------------------------------------------------------------------
diff --git a/scheduler/src/main/java/org/apache/falcon/workflow/engine/FalconWorkflowEngine.java b/scheduler/src/main/java/org/apache/falcon/workflow/engine/FalconWorkflowEngine.java
index bceab72..8306b34 100644
--- a/scheduler/src/main/java/org/apache/falcon/workflow/engine/FalconWorkflowEngine.java
+++ b/scheduler/src/main/java/org/apache/falcon/workflow/engine/FalconWorkflowEngine.java
@@ -27,6 +27,7 @@ import org.apache.falcon.entity.v0.Entity;
 import org.apache.falcon.entity.v0.EntityType;
 import org.apache.falcon.entity.v0.SchemaHelper;
 import org.apache.falcon.entity.v0.cluster.Cluster;
+import org.apache.falcon.exception.StateStoreException;
 import org.apache.falcon.execution.EntityExecutor;
 import org.apache.falcon.execution.ExecutionInstance;
 import org.apache.falcon.execution.FalconExecutionService;
@@ -267,23 +268,19 @@ public class FalconWorkflowEngine extends AbstractWorkflowEngine {
         switch(action) {
         case KILL:
             executor.kill(instance);
-            instanceInfo.status = InstancesResult.WorkflowStatus.KILLED;
+            populateInstanceInfo(instanceInfo, instance);
             break;
         case SUSPEND:
             executor.suspend(instance);
-            instanceInfo.status = InstancesResult.WorkflowStatus.SUSPENDED;
+            populateInstanceInfo(instanceInfo, instance);
             break;
         case RESUME:
             executor.resume(instance);
-            instanceInfo.status =
-                    InstancesResult.WorkflowStatus.valueOf(STATE_STORE
-                            .getExecutionInstance(instance.getId()).getCurrentState().name());
+            populateInstanceInfo(instanceInfo, instance);
             break;
         case RERUN:
             executor.rerun(instance, userProps, isForced);
-            instanceInfo.status =
-                    InstancesResult.WorkflowStatus.valueOf(STATE_STORE
-                            .getExecutionInstance(instance.getId()).getCurrentState().name());
+            populateInstanceInfo(instanceInfo, instance);
             break;
         case STATUS:
             // Mask wfParams
@@ -293,6 +290,9 @@ public class FalconWorkflowEngine extends AbstractWorkflowEngine {
                         DAGEngineFactory.getDAGEngine(cluster).getJobDetails(instance.getExternalID());
                 instanceInfo.actions = instanceActions
                         .toArray(new InstancesResult.InstanceAction[instanceActions.size()]);
+            // If not scheduled externally yet, get details from state
+            } else {
+                populateInstanceInfo(instanceInfo, instance);
             }
             break;
 
@@ -313,6 +313,39 @@ public class FalconWorkflowEngine extends AbstractWorkflowEngine {
         return instanceInfo;
     }
 
+    // Populates the InstancesResult.Instance instance using ExecutionInstance
+    private void populateInstanceInfo(InstancesResult.Instance instanceInfo, ExecutionInstance instance)
+        throws StateStoreException {
+        instanceInfo.cluster = instance.getCluster();
+        InstanceState.STATE state = STATE_STORE.getExecutionInstance(instance.getId()).getCurrentState();
+        switch (state) {
+        case SUCCEEDED:
+            instanceInfo.status = InstancesResult.WorkflowStatus.SUCCEEDED;
+            break;
+        case FAILED:
+            instanceInfo.status = InstancesResult.WorkflowStatus.FAILED;
+            break;
+        case KILLED:
+            instanceInfo.status = InstancesResult.WorkflowStatus.KILLED;
+            break;
+        case READY:
+            instanceInfo.status = InstancesResult.WorkflowStatus.READY;
+            break;
+        case WAITING:
+            instanceInfo.status = InstancesResult.WorkflowStatus.WAITING;
+            break;
+        case SUSPENDED:
+            instanceInfo.status = InstancesResult.WorkflowStatus.SUSPENDED;
+            break;
+        case RUNNING:
+            instanceInfo.status = InstancesResult.WorkflowStatus.RUNNING;
+            break;
+        default:
+            instanceInfo.status = InstancesResult.WorkflowStatus.UNDEFINED;
+            break;
+        }
+    }
+
     @Override
     public InstancesResult killInstances(Entity entity, Date start, Date end,
                                          Properties props, List<LifeCycle> lifeCycles) throws FalconException {