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 {