This is an automated email from the ASF dual-hosted git repository.
dimuthuupe pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata.git
The following commit(s) were added to refs/heads/master by this push:
new 88b8047 Fixing AIRAVATA-3022: Gracefully handling multiple launch
requests
88b8047 is described below
commit 88b8047b2dca73fea3b01bfc01f642537f15f1cc
Author: Dimuthu Wannipurage <[email protected]>
AuthorDate: Fri May 3 11:37:56 2019 -0400
Fixing AIRAVATA-3022: Gracefully handling multiple launch requests
---
.../server/OrchestratorServerHandler.java | 38 ++++++++++++++--------
1 file changed, 25 insertions(+), 13 deletions(-)
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 6741575..90ea7bb 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
@@ -45,6 +45,8 @@ import org.apache.airavata.model.messaging.event.*;
import org.apache.airavata.model.process.ProcessModel;
import org.apache.airavata.model.status.ExperimentState;
import org.apache.airavata.model.status.ExperimentStatus;
+import org.apache.airavata.model.status.ProcessState;
+import org.apache.airavata.model.status.ProcessStatus;
import org.apache.airavata.orchestrator.core.exception.OrchestratorException;
import org.apache.airavata.orchestrator.core.schedule.HostScheduler;
import org.apache.airavata.orchestrator.core.utils.OrchestratorConstants;
@@ -354,19 +356,29 @@ public class OrchestratorServerHandler implements
OrchestratorService.Iface {
public boolean launchProcess(String processId, String
airavataCredStoreToken, String gatewayId) throws TException {
final RegistryService.Client registryClient =
getRegistryServiceClient();
try {
- ProcessModel processModel =
registryClient.getProcess(processId);
- String applicationId = processModel.getApplicationInterfaceId();
- if (applicationId == null) {
- log.error(processId, "Application interface id shouldn't be
null.");
- throw new OrchestratorException("Error
executing the job, application interface id shouldn't be null.");
- }
- // set application deployment id to process model
- ApplicationDeploymentDescription applicationDeploymentDescription
= getAppDeployment(registryClient, processModel, applicationId);
-
processModel.setApplicationDeploymentId(applicationDeploymentDescription.getAppDeploymentId());
- // set compute resource id to process model, default we
set the same in the user preferred compute host id
-
processModel.setComputeResourceId(processModel.getProcessResourceSchedule().getResourceHostId());
-
registryClient.updateProcess(processModel,processModel.getProcessId());
- return orchestrator.launchProcess(processModel,
airavataCredStoreToken);
+ ProcessStatus processStatus =
registryClient.getProcessStatus(processId);
+
+ switch (processStatus.getState()) {
+ case CREATED: case VALIDATED:
+ ProcessModel processModel =
registryClient.getProcess(processId);
+ String applicationId =
processModel.getApplicationInterfaceId();
+ if (applicationId == null) {
+ log.error(processId, "Application interface id
shouldn't be null.");
+ throw new OrchestratorException("Error executing the
job, application interface id shouldn't be null.");
+ }
+ // set application deployment id to process model
+ ApplicationDeploymentDescription
applicationDeploymentDescription = getAppDeployment(registryClient,
processModel, applicationId);
+
processModel.setApplicationDeploymentId(applicationDeploymentDescription.getAppDeploymentId());
+ // set compute resource id to process model, default we
set the same in the user preferred compute host id
+
processModel.setComputeResourceId(processModel.getProcessResourceSchedule().getResourceHostId());
+ registryClient.updateProcess(processModel,
processModel.getProcessId());
+ return orchestrator.launchProcess(processModel,
airavataCredStoreToken);
+
+ default:
+ log.warn("Process " + processId + " is already launched.
So it can not be relaunched");
+ return false;
+ }
+
} catch (Exception e) {
log.error(processId, "Error while launching process ", e);
throw new TException(e);