This is an automated email from the ASF dual-hosted git repository.

dimuthuupe pushed a commit to branch staging
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/staging by this push:
     new 711c2d7  Improving workflow cancellation logic
711c2d7 is described below

commit 711c2d77ccdac6ad4a5a861bb178ec3c0a274fe0
Author: Dimuthu Wannipurage <[email protected]>
AuthorDate: Wed Dec 19 01:54:56 2018 +0530

    Improving workflow cancellation logic
---
 .../impl/task/cancel/WorkflowCancellationTask.java | 28 ++++++++++++++++++----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git 
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/cancel/WorkflowCancellationTask.java
 
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/cancel/WorkflowCancellationTask.java
index 150a77c..4ee3949 100644
--- 
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/cancel/WorkflowCancellationTask.java
+++ 
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/cancel/WorkflowCancellationTask.java
@@ -11,6 +11,7 @@ import org.apache.helix.InstanceType;
 import org.apache.helix.task.TaskDriver;
 import org.apache.helix.task.TaskResult;
 import org.apache.helix.task.TaskState;
+import org.apache.helix.task.WorkflowContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,22 +61,39 @@ public class WorkflowCancellationTask extends AbstractTask {
             logger.warn("Can not find a workflow with name " + 
cancellingWorkflowName + " but continuing");
             return onSuccess("Can not find a workflow with name " + 
cancellingWorkflowName + " but continuing");
         }
+
         try {
+            WorkflowContext workflowContext = 
taskDriver.getWorkflowContext(cancellingWorkflowName);
+
+            // if the workflow can not be found, ignore it
+            if (workflowContext == null) {
+                logger.warn("Can not find a workflow with id " + 
cancellingWorkflowName + ". So ignoring");
+                return onSuccess("Can not find a workflow with id " + 
cancellingWorkflowName + ". So ignoring");
+            }
 
-            TaskState workflowState = 
taskDriver.getWorkflowContext(cancellingWorkflowName).getWorkflowState();
+            TaskState workflowState = workflowContext.getWorkflowState();
             logger.info("Current state of workflow " + cancellingWorkflowName 
+ " : " + workflowState.name());
 
             taskDriver.stop(cancellingWorkflowName);
 
+        } catch (Exception e) {
+            logger.error("Failed to stop workflow " + cancellingWorkflowName, 
e);
+            // in case of an error, retry
+            return onFail("Failed to stop workflow " + cancellingWorkflowName 
+ ": " + e.getMessage(), false);
+        }
+
+        try {
             logger.info("Waiting maximum " + waitTime +"s for workflow " + 
cancellingWorkflowName + " state to change");
-            TaskState newWorkflowState = 
taskDriver.pollForWorkflowState(cancellingWorkflowName, waitTime * 1000, 
TaskState.COMPLETED, TaskState.FAILED,
-                    TaskState.STOPPED, TaskState.ABORTED, 
TaskState.NOT_STARTED);
+            TaskState newWorkflowState = 
taskDriver.pollForWorkflowState(cancellingWorkflowName, waitTime * 1000,
+                    TaskState.COMPLETED, TaskState.FAILED, TaskState.STOPPED, 
TaskState.ABORTED, TaskState.NOT_STARTED);
 
             logger.info("Workflow " + cancellingWorkflowName + " state changed 
to " + newWorkflowState.name());
             return onSuccess("Successfully cancelled workflow " + 
cancellingWorkflowName);
+
         } catch (Exception e) {
-            logger.error("Failed to stop workflow " + cancellingWorkflowName, 
e);
-            return onFail("Failed to stop workflow " + cancellingWorkflowName 
+ ": " + e.getMessage(), true);
+            logger.warn("Failed while watching workflow to stop " + 
cancellingWorkflowName, e);
+            return onSuccess("Failed while watching workflow to stop " + 
cancellingWorkflowName +". But continuing");
+
         } finally {
 
             try {

Reply via email to