You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2017/02/14 21:56:53 UTC

airavata git commit: AIRAVATA-2322 Fail experiment when validation fails

Repository: airavata
Updated Branches:
  refs/heads/develop 0926abf09 -> cfb0610fb


AIRAVATA-2322 Fail experiment when validation fails

Also add an experiment error messages with the validation error message, so
that the user can see the validation error.


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

Branch: refs/heads/develop
Commit: cfb0610fba8a4219814ed283904cebd1a2b01b6d
Parents: 0926abf
Author: Marcus Christie <ma...@apache.org>
Authored: Tue Feb 14 16:54:48 2017 -0500
Committer: Marcus Christie <ma...@apache.org>
Committed: Tue Feb 14 16:56:19 2017 -0500

----------------------------------------------------------------------
 .../validator/impl/BatchQueueValidator.java     |  4 +--
 .../server/OrchestratorServerHandler.java       | 36 +++++++++++++++-----
 2 files changed, 30 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/cfb0610f/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/BatchQueueValidator.java
----------------------------------------------------------------------
diff --git a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/BatchQueueValidator.java b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/BatchQueueValidator.java
index 173552e..58584ff 100644
--- a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/BatchQueueValidator.java
+++ b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/BatchQueueValidator.java
@@ -97,8 +97,8 @@ public class BatchQueueValidator implements JobMetadataValidator {
 
                         //Set the validation to false. Once all the queue's are looped, if nothing matches, then this gets passed.
                         queueNameResult.setResult(false);
-                        queueNameResult.setErrorDetails("The specified queue" + experimentQueueName +
-                                "does not exist. If you believe this is an error, contact the administrator to verify App-Catalog Configurations");
+                        queueNameResult.setErrorDetails("The specified queue " + experimentQueueName +
+                                " does not exist. If you believe this is an error, contact the administrator to verify App-Catalog Configurations");
                         for (BatchQueue queue : batchQueues) {
                             String resourceQueueName = queue.getQueueName();
                             int maxQueueRunTime = queue.getMaxRunTime();

http://git-wip-us.apache.org/repos/asf/airavata/blob/cfb0610f/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 ca78c89..0681b59 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
@@ -38,10 +38,12 @@ import org.apache.airavata.model.appcatalog.computeresource.ComputeResourceDescr
 import org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference;
 import org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile;
 import org.apache.airavata.model.application.io.DataType;
+import org.apache.airavata.model.commons.ErrorModel;
 import org.apache.airavata.model.data.replica.DataProductModel;
 import org.apache.airavata.model.data.replica.DataReplicaLocationModel;
 import org.apache.airavata.model.data.replica.ReplicaLocationCategory;
 import org.apache.airavata.model.error.LaunchValidationException;
+import org.apache.airavata.model.error.ValidationResults;
 import org.apache.airavata.model.experiment.ExperimentModel;
 import org.apache.airavata.model.experiment.ExperimentType;
 import org.apache.airavata.model.messaging.event.*;
@@ -241,6 +243,12 @@ public class OrchestratorServerHandler implements OrchestratorService.Iface {
                 log.error(experimentId, "Couldn't identify experiment type, experiment {} is neither single application nor workflow.", experimentId);
                 throw new TException("Experiment '" + experimentId + "' launch failed. Unable to figureout execution type for application " + experiment.getExecutionId());
             }
+		} catch (LaunchValidationException launchValidationException) {
+			ExperimentStatus status = new ExperimentStatus(ExperimentState.FAILED);
+			status.setReason("Validation failed: " + launchValidationException.getErrorMessage());
+			status.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
+			OrchestratorUtils.updageAndPublishExperimentStatus(experimentId, status, publisher, gatewayId);
+			throw new TException("Experiment '" + experimentId + "' launch failed. Experiment failed to validate: " + launchValidationException.getErrorMessage(), launchValidationException);
         } catch (Exception e) {
             throw new TException("Experiment '" + experimentId + "' launch failed. Unable to figureout execution type for application " + experiment.getExecutionId(), e);
         }
@@ -272,14 +280,26 @@ public class OrchestratorServerHandler implements OrchestratorService.Iface {
     @Override
     public boolean validateProcess(String experimentId, List<ProcessModel> processes) throws LaunchValidationException, TException {
         try {
-            ExperimentModel experimentModel = (ExperimentModel)experimentCatalog.get(ExperimentCatalogModelType.EXPERIMENT, experimentId);
-            for (ProcessModel processModel : processes){
-                boolean state = orchestrator.validateProcess(experimentModel, processModel).isSetValidationState();
-                if (!state){
-                    return false;
-                }
-            }
-            return true;
+			ExperimentModel experimentModel = (ExperimentModel) experimentCatalog.get(ExperimentCatalogModelType.EXPERIMENT, experimentId);
+			for (ProcessModel processModel : processes) {
+				boolean state = orchestrator.validateProcess(experimentModel, processModel).isSetValidationState();
+				if (!state) {
+					return false;
+				}
+			}
+			return true;
+		} catch (LaunchValidationException lve) {
+
+			// If a process failed to validate, also add an error message at the experiment level
+			ErrorModel details = new ErrorModel();
+			details.setActualErrorMessage(lve.getErrorMessage());
+			details.setCreationTime(Calendar.getInstance().getTimeInMillis());
+			try {
+				experimentCatalog.add(ExpCatChildDataType.EXPERIMENT_ERROR, details, experimentId);
+			} catch (RegistryException e) {
+			    log.error("Failed to add EXPERIMENT_ERROR regarding LaunchValidationException to experiment " + experimentId, e);
+			}
+			throw lve;
         } catch (OrchestratorException e) {
             log.error(experimentId, "Error while validating process", e);
             throw new TException(e);