You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tez.apache.org by rb...@apache.org on 2015/09/10 16:44:59 UTC
tez git commit: TEZ-2799. SimpleHistoryParser NPE (rbalamohan)
Repository: tez
Updated Branches:
refs/heads/master 00508f898 -> cb0890d58
TEZ-2799. SimpleHistoryParser NPE (rbalamohan)
Project: http://git-wip-us.apache.org/repos/asf/tez/repo
Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/cb0890d5
Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/cb0890d5
Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/cb0890d5
Branch: refs/heads/master
Commit: cb0890d58ae5639522aefe765e99e6d70f211fc7
Parents: 00508f8
Author: Rajesh Balamohan <rb...@apache.org>
Authored: Thu Sep 10 19:11:37 2015 +0530
Committer: Rajesh Balamohan <rb...@apache.org>
Committed: Thu Sep 10 19:11:37 2015 +0530
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../tez/history/parser/SimpleHistoryParser.java | 49 +++++++++++---------
2 files changed, 29 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tez/blob/cb0890d5/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2439370..6310134 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -7,6 +7,7 @@ Release 0.8.1: Unreleased
INCOMPATIBLE CHANGES
ALL CHANGES:
+ TEZ-2799. SimpleHistoryParser NPE
TEZ-2643. Minimize number of empty spills in Pipelined Sorter
TEZ-2783. Refactor analyzers to extend TezAnalyzerBase
TEZ-2784. optimize TaskImpl.isFinished()
http://git-wip-us.apache.org/repos/asf/tez/blob/cb0890d5/tez-plugins/tez-history-parser/src/main/java/org/apache/tez/history/parser/SimpleHistoryParser.java
----------------------------------------------------------------------
diff --git a/tez-plugins/tez-history-parser/src/main/java/org/apache/tez/history/parser/SimpleHistoryParser.java b/tez-plugins/tez-history-parser/src/main/java/org/apache/tez/history/parser/SimpleHistoryParser.java
index 09c010a..863cc40 100644
--- a/tez-plugins/tez-history-parser/src/main/java/org/apache/tez/history/parser/SimpleHistoryParser.java
+++ b/tez-plugins/tez-history-parser/src/main/java/org/apache/tez/history/parser/SimpleHistoryParser.java
@@ -32,6 +32,7 @@ import org.apache.tez.history.parser.datamodel.DagInfo;
import org.apache.tez.history.parser.datamodel.TaskAttemptInfo;
import org.apache.tez.history.parser.datamodel.TaskInfo;
import org.apache.tez.history.parser.datamodel.VertexInfo;
+import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.slf4j.Logger;
@@ -204,30 +205,36 @@ public class SimpleHistoryParser extends BaseParser {
* "entitytype":"containerId"} and populate it in otherInfo object so that in-memory
* representation can parse it correctly
*/
- JSONObject subJsonObject = jsonObject.optJSONArray(Constants.RELATED_ENTITIES)
- .optJSONObject(0);
- if (subJsonObject != null) {
- String nodeId = subJsonObject.optString(Constants.ENTITY_TYPE);
- if (!Strings.isNullOrEmpty(nodeId) && nodeId.equalsIgnoreCase(Constants.NODE_ID)) {
- //populate it in otherInfo
- JSONObject otherInfo = jsonObject.optJSONObject(Constants.OTHER_INFO);
- String nodeIdVal = subJsonObject.optString(Constants.ENTITY);
- if (otherInfo != null && nodeIdVal != null) {
- otherInfo.put(Constants.NODE_ID, nodeIdVal);
+ JSONArray relatedEntities = jsonObject.optJSONArray(Constants.RELATED_ENTITIES);
+ if (relatedEntities == null) {
+ //This can happen when CONTAINER_EXITED abruptly. (e.g Container failed, exitCode=1)
+ LOG.debug("entity {} did not have related entities",
+ jsonObject.optJSONObject(Constants.ENTITY));
+ } else {
+ JSONObject subJsonObject = relatedEntities.optJSONObject(0);
+ if (subJsonObject != null) {
+ String nodeId = subJsonObject.optString(Constants.ENTITY_TYPE);
+ if (!Strings.isNullOrEmpty(nodeId) && nodeId.equalsIgnoreCase(Constants.NODE_ID)) {
+ //populate it in otherInfo
+ JSONObject otherInfo = jsonObject.optJSONObject(Constants.OTHER_INFO);
+ String nodeIdVal = subJsonObject.optString(Constants.ENTITY);
+ if (otherInfo != null && nodeIdVal != null) {
+ otherInfo.put(Constants.NODE_ID, nodeIdVal);
+ }
}
}
- }
- subJsonObject = jsonObject.optJSONArray(Constants.RELATED_ENTITIES)
- .optJSONObject(1);
- if (subJsonObject != null) {
- String containerId = subJsonObject.optString(Constants.ENTITY_TYPE);
- if (!Strings.isNullOrEmpty(containerId) && containerId.equalsIgnoreCase(Constants.CONTAINER_ID)) {
- //populate it in otherInfo
- JSONObject otherInfo = jsonObject.optJSONObject(Constants.OTHER_INFO);
- String containerIdVal = subJsonObject.optString(Constants.ENTITY);
- if (otherInfo != null && containerIdVal != null) {
- otherInfo.put(Constants.CONTAINER_ID, containerIdVal);
+ subJsonObject = relatedEntities.optJSONObject(1);
+ if (subJsonObject != null) {
+ String containerId = subJsonObject.optString(Constants.ENTITY_TYPE);
+ if (!Strings.isNullOrEmpty(containerId) && containerId
+ .equalsIgnoreCase(Constants.CONTAINER_ID)) {
+ //populate it in otherInfo
+ JSONObject otherInfo = jsonObject.optJSONObject(Constants.OTHER_INFO);
+ String containerIdVal = subJsonObject.optString(Constants.ENTITY);
+ if (otherInfo != null && containerIdVal != null) {
+ otherInfo.put(Constants.CONTAINER_ID, containerIdVal);
+ }
}
}
}