TaskAttemptInfo(JSONObject jsonObject) throws JSONException { super(jsonObject); Preconditions.checkArgument( jsonObject .getString(Constants.ENTITY_TYPE) .equalsIgnoreCase(Constants.TEZ_TASK_ATTEMPT_ID)); taskAttemptId = StringInterner.weakIntern(jsonObject.optString(Constants.ENTITY)); // Parse additional Info final JSONObject otherInfoNode = jsonObject.getJSONObject(Constants.OTHER_INFO); startTime = otherInfoNode.optLong(Constants.START_TIME); endTime = otherInfoNode.optLong(Constants.FINISH_TIME); diagnostics = otherInfoNode.optString(Constants.DIAGNOSTICS); creationTime = otherInfoNode.optLong(Constants.CREATION_TIME); creationCausalTA = StringInterner.weakIntern(otherInfoNode.optString(Constants.CREATION_CAUSAL_ATTEMPT)); allocationTime = otherInfoNode.optLong(Constants.ALLOCATION_TIME); containerId = StringInterner.weakIntern(otherInfoNode.optString(Constants.CONTAINER_ID)); String id = otherInfoNode.optString(Constants.NODE_ID); nodeId = StringInterner.weakIntern((id != null) ? (id.split(":")[0]) : ""); logUrl = otherInfoNode.optString(Constants.COMPLETED_LOGS_URL); status = StringInterner.weakIntern(otherInfoNode.optString(Constants.STATUS)); container = new Container(containerId, nodeId); if (otherInfoNode.has(Constants.LAST_DATA_EVENTS)) { List<DataDependencyEvent> eventInfo = Utils.parseDataEventDependencyFromJSON( otherInfoNode.optJSONObject(Constants.LAST_DATA_EVENTS)); long lastTime = 0; for (DataDependencyEvent item : eventInfo) { // check these are in time order Preconditions.checkState(lastTime < item.getTimestamp()); lastTime = item.getTimestamp(); lastDataEvents.add(item); } } terminationCause = StringInterner.weakIntern(otherInfoNode.optString(ATSConstants.TASK_ATTEMPT_ERROR_ENUM)); executionTimeInterval = (endTime > startTime) ? (endTime - startTime) : 0; }