You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2018/04/09 18:13:14 UTC
[airavata] branch develop updated: Improving error handling and
adding error codes to easily track issues
This is an automated email from the ASF dual-hosted git repository.
dimuthuupe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata.git
The following commit(s) were added to refs/heads/develop by this push:
new 1ce6d3f Improving error handling and adding error codes to easily track issues
1ce6d3f is described below
commit 1ce6d3f55d30a845b1f642b5a7a5ba0b92408e98
Author: dimuthu <di...@gmail.com>
AuthorDate: Mon Apr 9 14:13:06 2018 -0400
Improving error handling and adding error codes to easily track issues
---
modules/airavata-helix/helix-spectator/pom.xml | 6 --
.../airavata/helix/impl/task/AiravataTask.java | 73 ++++++++++++----------
2 files changed, 41 insertions(+), 38 deletions(-)
diff --git a/modules/airavata-helix/helix-spectator/pom.xml b/modules/airavata-helix/helix-spectator/pom.xml
index 5e4449f..357c472 100644
--- a/modules/airavata-helix/helix-spectator/pom.xml
+++ b/modules/airavata-helix/helix-spectator/pom.xml
@@ -60,12 +60,6 @@
<artifactId>workflow-impl</artifactId>
<version>0.17-SNAPSHOT</version>
</dependency>
- <!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
- <dependency>
- <groupId>org.mariadb.jdbc</groupId>
- <artifactId>mariadb-java-client</artifactId>
- <version>1.1.7</version>
- </dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-templates</artifactId>
diff --git a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/AiravataTask.java b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/AiravataTask.java
index 978dd7b..6eb6456 100644
--- a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/AiravataTask.java
+++ b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/AiravataTask.java
@@ -42,6 +42,7 @@ import org.apache.airavata.model.status.*;
import org.apache.airavata.registry.api.RegistryService;
import org.apache.airavata.registry.api.client.RegistryServiceClientFactory;
import org.apache.airavata.registry.api.exception.RegistryServiceException;
+import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.helix.HelixManager;
import org.apache.helix.task.TaskResult;
import org.apache.thrift.TException;
@@ -53,6 +54,7 @@ import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Collections;
import java.util.List;
+import java.util.UUID;
public abstract class AiravataTask extends AbstractTask {
@@ -62,8 +64,9 @@ public abstract class AiravataTask extends AbstractTask {
private ProcessModel processModel;
private ComputeResourceDescription computeResourceDescription;
-
private TaskContext taskContext;
+ private String taskName;
+
@TaskParam(name = "Process Id")
private String processId;
@@ -86,22 +89,20 @@ public abstract class AiravataTask extends AbstractTask {
protected TaskResult onFail(String reason, boolean fatal, Throwable error) {
- String errorMessage;
ProcessStatus status = new ProcessStatus(ProcessState.FAILED);
StringWriter errors = new StringWriter();
- if (error == null) {
- errorMessage = "Task " + getTaskId() + " failed due to " + reason;
- errors.write(errorMessage);
- status.setReason(errorMessage);
- logger.error(errorMessage);
-
- } else {
- errorMessage = "Task " + getTaskId() + " failed due to " + reason + ", " + error.getMessage();
- status.setReason(errorMessage);
- error.printStackTrace(new PrintWriter(errors));
- logger.error(errorMessage, error);
- }
+ String errorCode = UUID.randomUUID().toString();
+ String errorMessage = "Error Code : " + errorCode + ", Task " + getTaskId() + " failed due to " + reason +
+ (error == null ? "" : ", " + error.getMessage());
+
+ // wrapping from new error object with error code
+ error = new TaskOnFailException(errorMessage, true, error);
+
+ status.setReason(errorMessage);
+ errors.write(ExceptionUtils.getStackTrace(error));
+ logger.error(errorMessage, error);
+
status.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
getTaskContext().setProcessStatus(status);
@@ -213,7 +214,7 @@ public abstract class AiravataTask extends AbstractTask {
try {
errorModel.setErrorId(AiravataUtils.getId("EXP_ERROR"));
getRegistryServiceClient().addErrors("EXPERIMENT_ERROR", errorModel, experimentId);
- } catch (TException e) {
+ } catch (Exception e) {
String msg = "expId: " + getExperimentId() + " processId: " + getProcessId() + " : - Error while updating experiment errors";
logger.error(msg, e);
}
@@ -224,10 +225,8 @@ public abstract class AiravataTask extends AbstractTask {
try {
errorModel.setErrorId(AiravataUtils.getId("PROCESS_ERROR"));
getRegistryServiceClient().addErrors("PROCESS_ERROR", errorModel, getProcessId());
- } catch (TException e) {
- String msg = "expId: " + getExperimentId() + " processId: " + getProcessId()
- + " : - Error while updating process errors";
- logger.error(msg, e);
+ } catch (Exception e) {
+ logger.error("expId: " + getExperimentId() + " processId: " + getProcessId() + " : - Error while updating process errors", e);
}
}
@@ -236,10 +235,9 @@ public abstract class AiravataTask extends AbstractTask {
try {
errorModel.setErrorId(AiravataUtils.getId("TASK_ERROR"));
getRegistryServiceClient().addErrors("TASK_ERROR", errorModel, getTaskId());
- } catch (TException e) {
- String msg = "expId: " + getExperimentId() + " processId: " + getProcessId() + " taskId: " + getTaskId()
- + " : - Error while updating task errors";
- logger.error(msg, e);
+ } catch (Exception e) {
+ logger.error("expId: " + getExperimentId() + " processId: " + getProcessId() + " taskId: " + getTaskId()
+ + " : - Error while updating task errors", e);
}
}
@@ -262,10 +260,13 @@ public abstract class AiravataTask extends AbstractTask {
MDC.put("process", getProcessId());
MDC.put("gateway", getGatewayId());
MDC.put("task", getTaskId());
+ loadContext();
if (!skipTaskStatusPublish) {
publishTaskState(TaskState.EXECUTING);
}
return onRun(helper, getTaskContext());
+ } catch (Exception e) {
+ return onFail("Unknown error while running task " + getTaskId(), true, e);
} finally {
MDC.clear();
}
@@ -294,11 +295,20 @@ public abstract class AiravataTask extends AbstractTask {
@Override
public void init(HelixManager manager, String workflowName, String jobName, String taskName) {
- super.init(manager, workflowName, jobName, taskName);
- MDC.put("experiment", getExperimentId());
- MDC.put("process", getProcessId());
- MDC.put("gateway", getGatewayId());
- MDC.put("task", getTaskId());
+
+ try {
+ super.init(manager, workflowName, jobName, taskName);
+ MDC.put("experiment", getExperimentId());
+ MDC.put("process", getProcessId());
+ MDC.put("gateway", getGatewayId());
+ MDC.put("task", getTaskId());
+ this.taskName = taskName;
+ } finally {
+ MDC.clear();
+ }
+ }
+
+ private void loadContext() throws TaskOnFailException {
try {
//logger.info("Gateway id is " + getGatewayId());
processModel = getRegistryServiceClient().getProcess(processId);
@@ -318,12 +328,11 @@ public abstract class AiravataTask extends AbstractTask {
processModel.getStorageResourceId()));
this.taskContext = taskContextBuilder.build();
- logger.info("Task " + taskName + " initialized");
+ logger.info("Task " + this.taskName + " initialized");
+
} catch (Exception e) {
logger.error("Error occurred while initializing the task " + getTaskId() + " of experiment " + getExperimentId(), e);
- throw new RuntimeException("Error occurred while initializing the task " + getTaskId() + " of experiment " + getExperimentId(), e);
- } finally {
- MDC.clear();
+ throw new TaskOnFailException("Error occurred while initializing the task " + getTaskId() + " of experiment " + getExperimentId(), true, e);
}
}
--
To stop receiving notification emails like this one, please contact
dimuthuupe@apache.org.