You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2015/11/23 21:04:13 UTC

airavata git commit: Only allow terminate operation for running experiments.

Repository: airavata
Updated Branches:
  refs/heads/develop 9e4dccffc -> bb5be4b5e


Only allow terminate operation for running experiments.


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

Branch: refs/heads/develop
Commit: bb5be4b5edf91eaf7d54c4564e9615e3bd5021b9
Parents: 9e4dccf
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Mon Nov 23 15:03:49 2015 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Mon Nov 23 15:03:49 2015 -0500

----------------------------------------------------------------------
 .../server/OrchestratorServerHandler.java       | 38 ++++++++++++--------
 1 file changed, 24 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/bb5be4b5/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java
----------------------------------------------------------------------
diff --git a/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java b/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java
index c1e9d65..94e804d 100644
--- a/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java
+++ b/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java
@@ -345,20 +345,30 @@ public class OrchestratorServerHandler implements OrchestratorService.Iface {
 	}
 
     private boolean validateStatesAndCancel(String experimentId, String gatewayId) throws Exception {
-	    String expCancelNodePath = ZKPaths.makePath(ZKPaths.makePath(ZkConstants.ZOOKEEPER_EXPERIMENT_NODE,
-			    experimentId), ZkConstants.ZOOKEEPER_CANCEL_LISTENER_NODE);
-	    Stat stat = curatorClient.checkExists().forPath(expCancelNodePath);
-	    if (stat != null) {
-		    curatorClient.setData().withVersion(-1).forPath(expCancelNodePath, ZkConstants.ZOOKEEPER_CANCEL_REQEUST
-				    .getBytes());
-		    ExperimentStatus status = new ExperimentStatus(ExperimentState.CANCELING);
-		    status.setReason("Experiment cancel request processed");
-		    status.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
-		    OrchestratorUtils.updageExperimentStatus(experimentId, status);
-		    log.info("expId : " + experimentId + " :- Experiment status updated to " + status.getState());
-		    return true;
-	    }
-	    return false;
+		ExperimentStatus experimentStatus = OrchestratorUtils.getExperimentStatus(experimentId);
+		switch (experimentStatus.getState()) {
+			case COMPLETED: case CANCELED: case FAILED: case CANCELING:
+				log.warn("Can't terminate already {} experiment", experimentStatus.getState().name());
+				return false;
+			case CREATED:
+				log.warn("Experiment termination is only allowed for launched experiments.");
+				return false;
+			default:
+				String expCancelNodePath = ZKPaths.makePath(ZKPaths.makePath(ZkConstants.ZOOKEEPER_EXPERIMENT_NODE,
+						experimentId), ZkConstants.ZOOKEEPER_CANCEL_LISTENER_NODE);
+				Stat stat = curatorClient.checkExists().forPath(expCancelNodePath);
+				if (stat != null) {
+					curatorClient.setData().withVersion(-1).forPath(expCancelNodePath, ZkConstants.ZOOKEEPER_CANCEL_REQEUST
+							.getBytes());
+					ExperimentStatus status = new ExperimentStatus(ExperimentState.CANCELING);
+					status.setReason("Experiment cancel request processed");
+					status.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
+					OrchestratorUtils.updageExperimentStatus(experimentId, status);
+					log.info("expId : " + experimentId + " :- Experiment status updated to " + status.getState());
+					return true;
+				}
+				return false;
+		}
     }
 
     private void launchWorkflowExperiment(String experimentId, String airavataCredStoreToken) throws TException {