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);