You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2015/09/08 20:34:16 UTC

airavata git commit: saving errors

Repository: airavata
Updated Branches:
  refs/heads/master 3f890f968 -> 26f1039b6


saving errors


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

Branch: refs/heads/master
Commit: 26f1039b6dbc202d00cf8f07709889a7e3962950
Parents: 3f890f9
Author: Chathuri Wimalasena <ch...@apache.org>
Authored: Tue Sep 8 14:34:05 2015 -0400
Committer: Chathuri Wimalasena <ch...@apache.org>
Committed: Tue Sep 8 14:34:05 2015 -0400

----------------------------------------------------------------------
 .../apache/airavata/gfac/core/GFacUtils.java    | 35 ++++++++++++++++++++
 .../airavata/gfac/impl/GFacEngineImpl.java      | 34 +++++++++++++++----
 .../apache/airavata/gfac/impl/GFacWorker.java   | 10 ++++++
 3 files changed, 72 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/26f1039b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
index 1870255..fe125b8 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
@@ -1093,6 +1093,41 @@ public class GFacUtils {
         }
     }
 
+    public static void saveExperimentError(ProcessContext processContext, ErrorModel errorModel) throws GFacException {
+        try {
+            ExperimentCatalog experimentCatalog = processContext.getExperimentCatalog();
+            String experimentId = processContext.getExperimentId();
+            experimentCatalog.add(ExpCatChildDataType.EXPERIMENT_ERROR, errorModel, experimentId);
+        } catch (RegistryException e) {
+            String msg = "expId: " + processContext.getExperimentId() + " processId: " + processContext.getProcessId()
+                    + " : - Error while updating experiment errors";
+            throw new GFacException(msg, e);
+        }
+    }
+
+    public static void saveProcessError(ProcessContext processContext, ErrorModel errorModel) throws GFacException {
+        try {
+            ExperimentCatalog experimentCatalog = processContext.getExperimentCatalog();
+            experimentCatalog.add(ExpCatChildDataType.PROCESS_ERROR, errorModel, processContext.getProcessId());
+        } catch (RegistryException e) {
+            String msg = "expId: " + processContext.getExperimentId() + " processId: " + processContext.getProcessId()
+                    + " : - Error while updating process errors";
+            throw new GFacException(msg, e);
+        }
+    }
+
+    public static void saveTaskError(TaskContext taskContext, ErrorModel errorModel) throws GFacException {
+        try {
+            ExperimentCatalog experimentCatalog = taskContext.getParentProcessContext().getExperimentCatalog();
+            String taskId = taskContext.getTaskId();
+            experimentCatalog.add(ExpCatChildDataType.TASK_ERROR, errorModel, taskId);
+        } catch (RegistryException e) {
+            String msg = "expId: " + taskContext.getParentProcessContext().getExperimentId() + " processId: " + taskContext.getParentProcessContext().getProcessId() + " taskId: " + taskContext.getTaskId()
+                    + " : - Error while updating task errors";
+            throw new GFacException(msg, e);
+        }
+    }
+
 	public static void handleProcessInterrupt(ProcessContext processContext) throws GFacException {
 		if (processContext.isCancel()) {
 			ProcessStatus pStatus = new ProcessStatus(ProcessState.CANCELLING);

http://git-wip-us.apache.org/repos/asf/airavata/blob/26f1039b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
index b0bdb65..7926fdb 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
@@ -42,6 +42,7 @@ import org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfil
 import org.apache.airavata.model.application.io.DataType;
 import org.apache.airavata.model.application.io.InputDataObjectType;
 import org.apache.airavata.model.application.io.OutputDataObjectType;
+import org.apache.airavata.model.commons.ErrorModel;
 import org.apache.airavata.model.job.JobModel;
 import org.apache.airavata.model.process.ProcessModel;
 import org.apache.airavata.model.status.ProcessState;
@@ -209,9 +210,15 @@ public class GFacEngineImpl implements GFacEngine {
 						taskStatus = executeTask(taskCtx, dMoveTask, false);
 						if (taskStatus.getState() == TaskState.FAILED) {
 							log.error("expId: {}, processId: {}, taskId: {} type: {},:- Input statging failed, " +
-									"reason:" + " {}", taskCtx.getParentProcessContext().getExperimentId(), taskCtx
-									.getParentProcessContext().getProcessId(), taskCtx.getTaskId(), dMoveTask.getType
-									().name(), taskStatus.getReason());
+                                    "reason:" + " {}", taskCtx.getParentProcessContext().getExperimentId(), taskCtx
+                                    .getParentProcessContext().getProcessId(), taskCtx.getTaskId(), dMoveTask.getType
+                                    ().name(), taskStatus.getReason());
+                            String errorMsg = "expId: {}, processId: {}, taskId: {} type: {},:- Input staging failed, " +
+                                    "reason:" + " {}" + processContext.getExperimentId() + processContext.getProcessId() + taskCtx.getTaskId() + dMoveTask.getType().name() + taskStatus.getReason();
+                            ErrorModel errorModel = new ErrorModel();
+                            errorModel.setUserFriendlyMessage("Error while staging input data");
+                            errorModel.setActualErrorMessage(errorMsg);
+                            GFacUtils.saveTaskError(taskCtx, errorModel);
 							throw new GFacException("Error while staging input data");
 						}
 						break;
@@ -243,10 +250,16 @@ public class GFacEngineImpl implements GFacEngine {
 		SSHEnvironmentSetupTask envSetupTask = new SSHEnvironmentSetupTask();
 		TaskStatus taskStatus = executeTask(taskCtx, envSetupTask, recover);
 		if (taskStatus.getState() == TaskState.FAILED) {
-			log.error("expId: {}, processId: {}, taskId: {} type: {},:- Input statging failed, " +
+			log.error("expId: {}, processId: {}, taskId: {} type: {},:- Input staging failed, " +
 					"reason:" + " {}", taskCtx.getParentProcessContext().getExperimentId(), taskCtx
 					.getParentProcessContext().getProcessId(), taskCtx.getTaskId(), envSetupTask.getType
 					().name(), taskStatus.getReason());
+            String errorMsg = "expId: {}, processId: {}, taskId: {} type: {},:- Input staging failed, " +
+                    "reason:" + " {}" + processContext.getExperimentId() + processContext.getProcessId() + taskCtx.getTaskId() + envSetupTask.getType().name() + taskStatus.getReason();
+            ErrorModel errorModel = new ErrorModel();
+            errorModel.setUserFriendlyMessage("Error while environment setup");
+            errorModel.setActualErrorMessage(errorMsg);
+            GFacUtils.saveTaskError(taskCtx, errorModel);
 			throw new GFacException("Error while environment setup");
 		}
 		if (processContext.isInterrupted()) {
@@ -349,7 +362,7 @@ public class GFacEngineImpl implements GFacEngine {
 					try {
 						taskCtx = getDataStagingTaskContext(processContext, processOutput);
 					} catch (TException e) {
-						throw new GFacException("Thrift model to byte[] convertion issue", e);
+						throw new GFacException("Thrift model to byte[] conversion issue", e);
 					}
 					File localWorkingdir = new File(taskCtx.getLocalWorkingDir());
 					localWorkingdir.mkdirs(); // make local dir if not exist
@@ -358,11 +371,18 @@ public class GFacEngineImpl implements GFacEngine {
 					Task dMoveTask = Factory.getDataMovementTask(processContext.getDataMovementProtocol());
 					TaskStatus taskStatus = executeTask(taskCtx, dMoveTask, recovery);
 					if (taskStatus.getState() == TaskState.FAILED) {
-						log.error("expId: {}, processId: {}, taskId: {} type: {},:- Input statging failed, " +
+						log.error("expId: {}, processId: {}, taskId: {} type: {},:- output staging failed, " +
 								"reason:" + " {}", taskCtx.getParentProcessContext().getExperimentId(), taskCtx
 								.getParentProcessContext().getProcessId(), taskCtx.getTaskId(), dMoveTask.getType
 								().name(), taskStatus.getReason());
-						throw new GFacException("Error while staging input data");
+
+                        String errorMsg = "expId: {}, processId: {}, taskId: {} type: {},:- output staging failed, " +
+                                "reason:" + " {}" + processContext.getExperimentId() + processContext.getProcessId() + taskCtx.getTaskId() + dMoveTask.getType().name() + taskStatus.getReason();
+                        ErrorModel errorModel = new ErrorModel();
+                        errorModel.setUserFriendlyMessage("Error while staging output data");
+                        errorModel.setActualErrorMessage(errorMsg);
+                        GFacUtils.saveTaskError(taskCtx, errorModel);
+						throw new GFacException("Error while staging output data");
 					}
 					break;
 				default:

http://git-wip-us.apache.org/repos/asf/airavata/blob/26f1039b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacWorker.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacWorker.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacWorker.java
index cdbca05..fe33a86 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacWorker.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacWorker.java
@@ -27,11 +27,14 @@ import org.apache.airavata.gfac.core.GFacException;
 import org.apache.airavata.gfac.core.GFacUtils;
 import org.apache.airavata.gfac.core.context.ProcessContext;
 import org.apache.airavata.gfac.core.monitor.JobMonitor;
+import org.apache.airavata.model.commons.ErrorModel;
 import org.apache.airavata.model.status.ProcessState;
 import org.apache.airavata.model.status.ProcessStatus;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.text.MessageFormat;
 
 public class GFacWorker implements Runnable {
@@ -123,8 +126,15 @@ public class GFacWorker implements Runnable {
 			ProcessStatus status = new ProcessStatus(ProcessState.FAILED);
 			status.setReason(e.getMessage());
 			processContext.setProcessStatus(status);
+            StringWriter errors = new StringWriter();
+            e.printStackTrace(new PrintWriter(errors));
+            ErrorModel errorModel = new ErrorModel();
+            errorModel.setUserFriendlyMessage("GFac Worker throws an exception");
+            errorModel.setActualErrorMessage(errors.toString());
 			try {
 				GFacUtils.saveAndPublishProcessStatus(processContext);
+                GFacUtils.saveExperimentError(processContext, errorModel);
+                GFacUtils.saveProcessError(processContext, errorModel);
 			} catch (GFacException e1) {
 				log.error("expId: {}, processId: {} :- Couldn't save and publish process status {}", processContext
 						.getExperimentId(), processContext.getProcessId(), processContext.getProcessState());