You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by bl...@apache.org on 2012/11/06 21:53:35 UTC
[5/5] git commit: SQOOP-679 Wrap exception to MSubmission metadata
object (Jarek Jarcec Cecho)
SQOOP-679 Wrap exception to MSubmission metadata object
(Jarek Jarcec Cecho)
Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/25f3fd33
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/25f3fd33
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/25f3fd33
Branch: refs/heads/sqoop2
Commit: 25f3fd331fefaea9da5b90ceda1d788fe79c51dc
Parents: 0976713
Author: Bilung Lee <bl...@apache.org>
Authored: Mon Nov 5 14:16:09 2012 -0800
Committer: Bilung Lee <bl...@apache.org>
Committed: Mon Nov 5 14:16:09 2012 -0800
----------------------------------------------------------------------
.../sqoop/client/utils/SubmissionDisplayer.java | 25 +++++++-
.../java/org/apache/sqoop/json/SubmissionBean.java | 14 ++++
.../java/org/apache/sqoop/model/MSubmission.java | 51 ++++++++++++++-
.../apache/sqoop/submission/SubmissionStatus.java | 4 +
.../org/apache/sqoop/json/TestSubmissionBean.java | 16 +++++
.../mapreduce/MapreduceSubmissionEngine.java | 1 +
6 files changed, 109 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/sqoop/blob/25f3fd33/client/src/main/java/org/apache/sqoop/client/utils/SubmissionDisplayer.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/utils/SubmissionDisplayer.java b/client/src/main/java/org/apache/sqoop/client/utils/SubmissionDisplayer.java
index d4d6825..a7b4bca 100644
--- a/client/src/main/java/org/apache/sqoop/client/utils/SubmissionDisplayer.java
+++ b/client/src/main/java/org/apache/sqoop/client/utils/SubmissionDisplayer.java
@@ -18,6 +18,7 @@
package org.apache.sqoop.client.utils;
import org.apache.sqoop.model.MSubmission;
+import org.apache.sqoop.submission.SubmissionStatus;
import org.apache.sqoop.submission.counter.Counter;
import org.apache.sqoop.submission.counter.CounterGroup;
import org.apache.sqoop.submission.counter.Counters;
@@ -35,7 +36,8 @@ public final class SubmissionDisplayer {
io.out.println(submission.getJobId());
io.out.print("Status: ");
- io.out.println(submission.getStatus());
+ printColoredStatus(io, submission.getStatus());
+ io.out.println();
String externalId = submission.getExternalId();
if(externalId != null) {
@@ -72,5 +74,26 @@ public final class SubmissionDisplayer {
}
}
}
+
+ // Exception handling
+ if(submission.getExceptionInfo() != null) {
+ io.out.print("@|red Exception: |@");
+ io.out.println(submission.getExceptionInfo());
+
+ if(submission.getExceptionStackTrace() != null) {
+ io.out.print("@|bold Stack trace: |@");
+ io.out.println(submission.getExceptionStackTrace());
+ }
+ }
+ }
+
+ public static void printColoredStatus(IO io, SubmissionStatus status) {
+ if(status.isRunning()) {
+ io.out.print("@|green " + status.toString() + " |@");
+ } else if(status.isFailure()) {
+ io.out.print("@|red " + status.toString() + " |@");
+ } else {
+ io.out.print(status.toString());
+ }
}
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/25f3fd33/common/src/main/java/org/apache/sqoop/json/SubmissionBean.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/json/SubmissionBean.java b/common/src/main/java/org/apache/sqoop/json/SubmissionBean.java
index d7188f4..0880418 100644
--- a/common/src/main/java/org/apache/sqoop/json/SubmissionBean.java
+++ b/common/src/main/java/org/apache/sqoop/json/SubmissionBean.java
@@ -38,6 +38,8 @@ public class SubmissionBean implements JsonBean {
private static final String STATUS = "status";
private static final String EXTERNAL_ID = "external-id";
private static final String EXTERNAL_LINK = "external-link";
+ private static final String EXCEPTION = "exception";
+ private static final String EXCEPTION_TRACE = "exception-trace";
private static final String PROGRESS = "progress";
private static final String COUNTERS = "counters";
@@ -74,6 +76,12 @@ public class SubmissionBean implements JsonBean {
if(submission.getExternalLink() != null) {
ret.put(EXTERNAL_LINK, submission.getExternalLink());
}
+ if(submission.getExceptionInfo() != null) {
+ ret.put(EXCEPTION, submission.getExceptionInfo());
+ }
+ if(submission.getExceptionStackTrace() != null) {
+ ret.put(EXCEPTION_TRACE, submission.getExceptionStackTrace());
+ }
if(submission.getCounters() != null) {
ret.put(COUNTERS, extractCounters(submission.getCounters()));
}
@@ -113,6 +121,12 @@ public class SubmissionBean implements JsonBean {
if(json.containsKey(EXTERNAL_LINK)) {
submission.setExternalLink((String) json.get(EXTERNAL_LINK));
}
+ if(json.containsKey(EXCEPTION)) {
+ submission.setExceptionInfo((String) json.get(EXCEPTION));
+ }
+ if(json.containsKey(EXCEPTION_TRACE)) {
+ submission.setExceptionStackTrace((String) json.get(EXCEPTION_TRACE));
+ }
if(json.containsKey(COUNTERS)) {
submission.setCounters(restoreCounters((JSONObject) json.get(COUNTERS)));
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/25f3fd33/common/src/main/java/org/apache/sqoop/model/MSubmission.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MSubmission.java b/common/src/main/java/org/apache/sqoop/model/MSubmission.java
index f8ca32e..c8ba0e2 100644
--- a/common/src/main/java/org/apache/sqoop/model/MSubmission.java
+++ b/common/src/main/java/org/apache/sqoop/model/MSubmission.java
@@ -20,6 +20,8 @@ package org.apache.sqoop.model;
import org.apache.sqoop.submission.SubmissionStatus;
import org.apache.sqoop.submission.counter.Counters;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.util.Date;
/**
@@ -82,6 +84,20 @@ public class MSubmission extends MPersistableEntity {
*/
String externalLink;
+ /**
+ * Associated exception info with this job (if any).
+ *
+ * This is optional property that is not serialized in metastore.
+ */
+ String exceptionInfo;
+
+ /**
+ * Associated exception stacktrace with this job (if any).
+ *
+ * This is optional property that is not serialized in metastore.
+ */
+ String exceptionStackTrace;
+
public MSubmission() {
status = SubmissionStatus.UNKNOWN;
progress = -1;
@@ -168,13 +184,46 @@ public class MSubmission extends MPersistableEntity {
return externalLink;
}
+ public void setExceptionInfo(String exceptionInfo) {
+ this.exceptionInfo = exceptionInfo;
+ }
+
+ public String getExceptionInfo() {
+ return exceptionInfo;
+ }
+
+ public void setExceptionStackTrace(String stackTrace) {
+ this.exceptionStackTrace = stackTrace;
+ }
+
+ public String getExceptionStackTrace() {
+ return exceptionStackTrace;
+ }
+
+ public void setException(Throwable e) {
+ // Exception info
+ this.setExceptionInfo(e.toString());
+
+ // Exception stack trace
+ StringWriter writer = new StringWriter();
+ e.printStackTrace(new PrintWriter(writer));
+ writer.flush();
+ this.setExceptionStackTrace(writer.toString());
+ }
+
@Override
public String toString() {
return "MSubmission{" +
"jobId=" + jobId +
", date=" + date +
", status=" + status +
- ", externalId=" + externalId + "}";
+ ", externalId='" + externalId + '\'' +
+ ", progress=" + progress +
+ ", counters=" + counters +
+ ", externalLink='" + externalLink + '\'' +
+ ", exceptionInfo='" + exceptionInfo + '\'' +
+ ", exceptionStackTrace='" + exceptionStackTrace + '\'' +
+ '}';
}
public static MSubmission UNKNOWN = new MSubmission();
http://git-wip-us.apache.org/repos/asf/sqoop/blob/25f3fd33/common/src/main/java/org/apache/sqoop/submission/SubmissionStatus.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/submission/SubmissionStatus.java b/common/src/main/java/org/apache/sqoop/submission/SubmissionStatus.java
index 025690a..e2da8f5 100644
--- a/common/src/main/java/org/apache/sqoop/submission/SubmissionStatus.java
+++ b/common/src/main/java/org/apache/sqoop/submission/SubmissionStatus.java
@@ -72,4 +72,8 @@ public enum SubmissionStatus {
public boolean isRunning() {
return this == RUNNING || this == BOOTING;
}
+
+ public boolean isFailure() {
+ return this == FAILED || this == UNKNOWN || this == FAILURE_ON_SUBMIT;
+ }
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/25f3fd33/common/src/test/java/org/apache/sqoop/json/TestSubmissionBean.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/json/TestSubmissionBean.java b/common/src/test/java/org/apache/sqoop/json/TestSubmissionBean.java
index 9c5e043..9732fa1 100644
--- a/common/src/test/java/org/apache/sqoop/json/TestSubmissionBean.java
+++ b/common/src/test/java/org/apache/sqoop/json/TestSubmissionBean.java
@@ -78,6 +78,22 @@ public class TestSubmissionBean extends TestCase {
assertEquals("http://", target.getExternalLink());
}
+ public void testTransferException() {
+ MSubmission source = new MSubmission();
+ source.setExceptionInfo("EndOfTheWorldException");
+
+ MSubmission target = transfer(source);
+ assertEquals("EndOfTheWorldException", target.getExceptionInfo());
+ }
+
+ public void testTransferExceptionTrace() {
+ MSubmission source = new MSubmission();
+ source.setExceptionStackTrace("void.java(3): line infinity");
+
+ MSubmission target = transfer(source);
+ assertEquals("void.java(3): line infinity", target.getExceptionStackTrace());
+ }
+
public void testTransferProgress() {
MSubmission source = new MSubmission();
source.setProgress(25.0);
http://git-wip-us.apache.org/repos/asf/sqoop/blob/25f3fd33/submission/mapreduce/src/main/java/org/apache/sqoop/submission/mapreduce/MapreduceSubmissionEngine.java
----------------------------------------------------------------------
diff --git a/submission/mapreduce/src/main/java/org/apache/sqoop/submission/mapreduce/MapreduceSubmissionEngine.java b/submission/mapreduce/src/main/java/org/apache/sqoop/submission/mapreduce/MapreduceSubmissionEngine.java
index 7049924..94098de 100644
--- a/submission/mapreduce/src/main/java/org/apache/sqoop/submission/mapreduce/MapreduceSubmissionEngine.java
+++ b/submission/mapreduce/src/main/java/org/apache/sqoop/submission/mapreduce/MapreduceSubmissionEngine.java
@@ -197,6 +197,7 @@ public class MapreduceSubmissionEngine extends SubmissionEngine {
LOG.debug("Executed new map-reduce job with id " + jobId);
} catch (Exception e) {
+ request.getSummary().setException(e);
LOG.error("Error in submitting job", e);
return false;
}