Repository: tez Updated Branches: refs/heads/branch-0.7 570a190c6 -> 1cb6e0f82
TEZ-2863. Container, node, and logs not available in UI for tasks that fail to launch (jeagles) Project: http://git-wip-us.apache.org/repos/asf/tez/repo Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/1cb6e0f8 Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/1cb6e0f8 Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/1cb6e0f8 Branch: refs/heads/branch-0.7 Commit: 1cb6e0f82ea79e2d29521053ef5b2a11795a407f Parents: 570a190 Author: Jonathan Eagles <[email protected]> Authored: Tue Mar 8 17:33:26 2016 -0600 Committer: Jonathan Eagles <[email protected]> Committed: Tue Mar 8 17:33:26 2016 -0600 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../TaskAttemptEventContainerTerminated.java | 11 ++- ...AttemptEventContainerTerminatedBySystem.java | 12 ++- .../tez/dag/app/dag/impl/TaskAttemptImpl.java | 87 +++++++++++++++----- .../dag/app/rm/container/AMContainerImpl.java | 4 +- .../events/TaskAttemptFinishedEvent.java | 63 +++++++++++++- .../impl/HistoryEventJsonConversion.java | 16 ++++ tez-dag/src/main/proto/HistoryEvents.proto | 3 + .../tez/dag/app/dag/impl/TestTaskAttempt.java | 8 +- .../app/dag/impl/TestTaskAttemptRecovery.java | 4 +- .../tez/dag/app/dag/impl/TestTaskRecovery.java | 34 ++++---- .../TestHistoryEventsProtoConversion.java | 24 +++++- .../impl/TestHistoryEventJsonConversion.java | 3 +- .../ats/HistoryEventTimelineConversion.java | 16 ++++ .../ats/TestHistoryEventTimelineConversion.java | 12 ++- 15 files changed, 242 insertions(+), 56 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 2e2f852..c0870a5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -9,6 +9,7 @@ INCOMPATIBLE CHANGES TEZ-2972. Avoid task rescheduling when a node turns unhealthy ALL CHANGES: + TEZ-2863. Container, node, and logs not available in UI for tasks that fail to launch TEZ-3140. Reduce AM memory usage during serialization TEZ-3156. Tez client keeps trying to talk to RM even if RM does not know about the application. TEZ-3115. Shuffle string handling adds significant memory overhead http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/main/java/org/apache/tez/dag/app/dag/event/TaskAttemptEventContainerTerminated.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/main/java/org/apache/tez/dag/app/dag/event/TaskAttemptEventContainerTerminated.java b/tez-dag/src/main/java/org/apache/tez/dag/app/dag/event/TaskAttemptEventContainerTerminated.java index 5dd0141..3db2ffc 100644 --- a/tez-dag/src/main/java/org/apache/tez/dag/app/dag/event/TaskAttemptEventContainerTerminated.java +++ b/tez-dag/src/main/java/org/apache/tez/dag/app/dag/event/TaskAttemptEventContainerTerminated.java @@ -17,22 +17,29 @@ package org.apache.tez.dag.app.dag.event; +import org.apache.hadoop.yarn.api.records.ContainerId; import org.apache.tez.dag.records.TaskAttemptTerminationCause; import org.apache.tez.dag.records.TezTaskAttemptID; public class TaskAttemptEventContainerTerminated extends TaskAttemptEvent implements DiagnosableEvent, TaskAttemptEventTerminationCauseEvent { + private final ContainerId containerId; private final String message; private final TaskAttemptTerminationCause errorCause; - public TaskAttemptEventContainerTerminated(TezTaskAttemptID id, String message, - TaskAttemptTerminationCause errCause) { + public TaskAttemptEventContainerTerminated(ContainerId containerId, TezTaskAttemptID id, + String message, TaskAttemptTerminationCause errCause) { super(id, TaskAttemptEventType.TA_CONTAINER_TERMINATED); + this.containerId = containerId; this.message = message; this.errorCause = errCause; } + public ContainerId getContainerId() { + return containerId; + } + @Override public String getDiagnosticInfo() { return message; http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/main/java/org/apache/tez/dag/app/dag/event/TaskAttemptEventContainerTerminatedBySystem.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/main/java/org/apache/tez/dag/app/dag/event/TaskAttemptEventContainerTerminatedBySystem.java b/tez-dag/src/main/java/org/apache/tez/dag/app/dag/event/TaskAttemptEventContainerTerminatedBySystem.java index a3c57e4..4efbf88 100644 --- a/tez-dag/src/main/java/org/apache/tez/dag/app/dag/event/TaskAttemptEventContainerTerminatedBySystem.java +++ b/tez-dag/src/main/java/org/apache/tez/dag/app/dag/event/TaskAttemptEventContainerTerminatedBySystem.java @@ -18,21 +18,29 @@ package org.apache.tez.dag.app.dag.event; +import org.apache.hadoop.yarn.api.records.ContainerId; import org.apache.tez.dag.records.TaskAttemptTerminationCause; import org.apache.tez.dag.records.TezTaskAttemptID; public class TaskAttemptEventContainerTerminatedBySystem extends TaskAttemptEvent implements DiagnosableEvent, TaskAttemptEventTerminationCauseEvent { + private final ContainerId containerId; private final String diagnostics; private final TaskAttemptTerminationCause errorCause; - public TaskAttemptEventContainerTerminatedBySystem(TezTaskAttemptID id, String diagnostics, - TaskAttemptTerminationCause errorCause) { + + public TaskAttemptEventContainerTerminatedBySystem(ContainerId containerId, TezTaskAttemptID id, + String diagnostics, TaskAttemptTerminationCause errorCause) { super(id, TaskAttemptEventType.TA_CONTAINER_TERMINATED_BY_SYSTEM); + this.containerId = containerId; this.diagnostics = diagnostics; this.errorCause = errorCause; } + public ContainerId getContainerId() { + return containerId; + } + @Override public String getDiagnosticInfo() { return diagnostics; http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/TaskAttemptImpl.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/TaskAttemptImpl.java b/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/TaskAttemptImpl.java index 75082da..aa1b39c 100644 --- a/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/TaskAttemptImpl.java +++ b/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/TaskAttemptImpl.java @@ -74,6 +74,7 @@ import org.apache.tez.dag.app.dag.event.DiagnosableEvent; import org.apache.tez.dag.app.dag.event.TaskAttemptEvent; import org.apache.tez.dag.app.dag.event.TaskAttemptEventAttemptFailed; import org.apache.tez.dag.app.dag.event.TaskAttemptEventContainerTerminated; +import org.apache.tez.dag.app.dag.event.TaskAttemptEventContainerTerminatedBySystem; import org.apache.tez.dag.app.dag.event.TaskAttemptEventDiagnosticsUpdate; import org.apache.tez.dag.app.dag.event.TaskAttemptEventTerminationCauseEvent; import org.apache.tez.dag.app.dag.event.TaskAttemptEventOutputFailed; @@ -1072,23 +1073,8 @@ public class TaskAttemptImpl implements TaskAttempt, } protected void logJobHistoryAttemptStarted() { - final String containerIdStr = containerId.toString(); - String inProgressLogsUrl = nodeHttpAddress - + "/" + "node/containerlogs" - + "/" + containerIdStr - + "/" + this.appContext.getUser(); - String completedLogsUrl = ""; - if (conf.getBoolean(YarnConfiguration.LOG_AGGREGATION_ENABLED, - YarnConfiguration.DEFAULT_LOG_AGGREGATION_ENABLED) - && conf.get(YarnConfiguration.YARN_LOG_SERVER_URL) != null) { - String contextStr = "v_" + getVertex().getName() - + "_" + this.attemptId.toString(); - completedLogsUrl = conf.get(YarnConfiguration.YARN_LOG_SERVER_URL) - + "/" + containerNodeId.toString() - + "/" + containerIdStr - + "/" + contextStr - + "/" + this.appContext.getUser(); - } + String inProgressLogsUrl = getInProgressLogsUrl(); + String completedLogsUrl = getCompletedLogsUrl(); TaskAttemptStartedEvent startEvt = new TaskAttemptStartedEvent( attemptId, getVertex().getName(), launchTime, containerId, containerNodeId, @@ -1104,7 +1090,7 @@ public class TaskAttemptImpl implements TaskAttempt, TaskAttemptFinishedEvent finishEvt = new TaskAttemptFinishedEvent( attemptId, getVertex().getName(), getLaunchTime(), getFinishTime(), TaskAttemptState.SUCCEEDED, null, - "", getCounters(), lastDataEvents, creationTime, creationCausalTA, allocationTime); + "", getCounters(), lastDataEvents, creationTime, creationCausalTA, allocationTime, null, null, null, null, null); // FIXME how do we store information regd completion events this.appContext.getHistoryHandler().handle( new DAGHistoryEvent(getDAGID(), finishEvt)); @@ -1113,8 +1099,16 @@ public class TaskAttemptImpl implements TaskAttempt, protected void logJobHistoryAttemptUnsuccesfulCompletion( TaskAttemptState state) { long finishTime = getFinishTime(); + ContainerId unsuccessfulContainerId = null; + NodeId unsuccessfulContainerNodeId = null; + String inProgressLogsUrl = null; + String completedLogsUrl = null; if (finishTime <= 0) { finishTime = clock.getTime(); // comes here in case it was terminated before launch + unsuccessfulContainerId = containerId; + unsuccessfulContainerNodeId = containerNodeId; + inProgressLogsUrl = getInProgressLogsUrl(); + completedLogsUrl = getCompletedLogsUrl(); } TaskAttemptFinishedEvent finishEvt = new TaskAttemptFinishedEvent( attemptId, getVertex().getName(), getLaunchTime(), @@ -1122,12 +1116,43 @@ public class TaskAttemptImpl implements TaskAttempt, terminationCause, StringUtils.join( getDiagnostics(), LINE_SEPARATOR), getCounters(), lastDataEvents, - creationTime, creationCausalTA, allocationTime); + creationTime, creationCausalTA, allocationTime, unsuccessfulContainerId, unsuccessfulContainerNodeId, inProgressLogsUrl, completedLogsUrl, nodeHttpAddress); // FIXME how do we store information regd completion events this.appContext.getHistoryHandler().handle( new DAGHistoryEvent(getDAGID(), finishEvt)); } + private String getInProgressLogsUrl() { + String inProgressLogsUrl = null; + if (containerId != null && nodeHttpAddress != null) { + final String containerIdStr = containerId.toString(); + inProgressLogsUrl = nodeHttpAddress + + "/" + "node/containerlogs" + + "/" + containerIdStr + + "/" + this.appContext.getUser(); + } + return inProgressLogsUrl; + } + + private String getCompletedLogsUrl() { + String completedLogsUrl = null; + if (containerId != null && containerNodeId != null && nodeHttpAddress != null) { + final String containerIdStr = containerId.toString(); + if (conf.getBoolean(YarnConfiguration.LOG_AGGREGATION_ENABLED, + YarnConfiguration.DEFAULT_LOG_AGGREGATION_ENABLED) + && conf.get(YarnConfiguration.YARN_LOG_SERVER_URL) != null) { + String contextStr = "v_" + getVertex().getName() + + "_" + this.attemptId.toString(); + completedLogsUrl = conf.get(YarnConfiguration.YARN_LOG_SERVER_URL) + + "/" + containerNodeId.toString() + + "/" + containerIdStr + + "/" + contextStr + + "/" + this.appContext.getUser(); + } + } + return completedLogsUrl; + } + ////////////////////////////////////////////////////////////////////////////// // Start of Transition Classes // ////////////////////////////////////////////////////////////////////////////// @@ -1246,6 +1271,30 @@ public class TaskAttemptImpl implements TaskAttempt, + ", eventClass=" + event.getClass().getName()); } + if (event instanceof TaskAttemptEventContainerTerminated) { + TaskAttemptEventContainerTerminated tEvent = (TaskAttemptEventContainerTerminated) event; + AMContainer amContainer = ta.appContext.getAllContainers().get(tEvent.getContainerId()); + Container container = amContainer.getContainer(); + + ta.allocationTime = amContainer.getCurrentTaskAttemptAllocationTime(); + ta.container = container; + ta.containerId = tEvent.getContainerId(); + ta.containerNodeId = container.getNodeId(); + ta.nodeHttpAddress = StringInterner.weakIntern(container.getNodeHttpAddress()); + } + + if (event instanceof TaskAttemptEventContainerTerminatedBySystem) { + TaskAttemptEventContainerTerminatedBySystem tEvent = (TaskAttemptEventContainerTerminatedBySystem) event; + AMContainer amContainer = ta.appContext.getAllContainers().get(tEvent.getContainerId()); + Container container = amContainer.getContainer(); + + ta.allocationTime = amContainer.getCurrentTaskAttemptAllocationTime(); + ta.container = container; + ta.containerId = tEvent.getContainerId(); + ta.containerNodeId = container.getNodeId(); + ta.nodeHttpAddress = StringInterner.weakIntern(container.getNodeHttpAddress()); + } + ta.sendEvent(createDAGCounterUpdateEventTAFinished(ta, helper.getTaskAttemptState())); ta.logJobHistoryAttemptUnsuccesfulCompletion(helper http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/main/java/org/apache/tez/dag/app/rm/container/AMContainerImpl.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/main/java/org/apache/tez/dag/app/rm/container/AMContainerImpl.java b/tez-dag/src/main/java/org/apache/tez/dag/app/rm/container/AMContainerImpl.java index 8b6e861..05ff2b2 100644 --- a/tez-dag/src/main/java/org/apache/tez/dag/app/rm/container/AMContainerImpl.java +++ b/tez-dag/src/main/java/org/apache/tez/dag/app/rm/container/AMContainerImpl.java @@ -1032,12 +1032,12 @@ public class AMContainerImpl implements AMContainer { protected void sendTerminatedToTaskAttempt( TezTaskAttemptID taId, String message, TaskAttemptTerminationCause errCause) { - sendEvent(new TaskAttemptEventContainerTerminated(taId, message, errCause)); + sendEvent(new TaskAttemptEventContainerTerminated(containerId, taId, message, errCause)); } protected void sendContainerTerminatedBySystemToTaskAttempt( TezTaskAttemptID taId, String message, TaskAttemptTerminationCause errorCause) { - sendEvent(new TaskAttemptEventContainerTerminatedBySystem(taId, message, errorCause)); + sendEvent(new TaskAttemptEventContainerTerminatedBySystem(containerId, taId, message, errorCause)); } protected void sendTerminatingToTaskAttempt(TezTaskAttemptID taId, http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/main/java/org/apache/tez/dag/history/events/TaskAttemptFinishedEvent.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/main/java/org/apache/tez/dag/history/events/TaskAttemptFinishedEvent.java b/tez-dag/src/main/java/org/apache/tez/dag/history/events/TaskAttemptFinishedEvent.java index 7d83db2..09ff270 100644 --- a/tez-dag/src/main/java/org/apache/tez/dag/history/events/TaskAttemptFinishedEvent.java +++ b/tez-dag/src/main/java/org/apache/tez/dag/history/events/TaskAttemptFinishedEvent.java @@ -28,6 +28,9 @@ import org.slf4j.LoggerFactory; import com.google.common.collect.Lists; +import org.apache.hadoop.yarn.api.records.ContainerId; +import org.apache.hadoop.yarn.api.records.NodeId; +import org.apache.hadoop.yarn.util.ConverterUtils; import org.apache.tez.common.counters.TezCounters; import org.apache.tez.dag.api.DagTypeConverters; import org.apache.tez.dag.api.oldrecords.TaskAttemptState; @@ -55,7 +58,12 @@ public class TaskAttemptFinishedEvent implements HistoryEvent { private TezCounters tezCounters; private TaskAttemptTerminationCause error; private List<DataEventDependencyInfo> dataEvents; - + private ContainerId containerId; + private NodeId nodeId; + private String inProgressLogsUrl; + private String completedLogsUrl; + private String nodeHttpAddress; + public TaskAttemptFinishedEvent(TezTaskAttemptID taId, String vertexName, long startTime, @@ -66,7 +74,12 @@ public class TaskAttemptFinishedEvent implements HistoryEvent { List<DataEventDependencyInfo> dataEvents, long creationTime, TezTaskAttemptID creationCausalTA, - long allocationTime) { + long allocationTime, + ContainerId containerId, + NodeId nodeId, + String inProgressLogsUrl, + String completedLogsUrl, + String nodeHttpAddress) { this.taskAttemptId = taId; this.vertexName = vertexName; this.creationCausalTA = creationCausalTA; @@ -79,6 +92,11 @@ public class TaskAttemptFinishedEvent implements HistoryEvent { this.tezCounters = counters; this.error = error; this.dataEvents = dataEvents; + this.containerId = containerId; + this.nodeId = nodeId; + this.inProgressLogsUrl = inProgressLogsUrl; + this.completedLogsUrl = completedLogsUrl; + this.nodeHttpAddress = nodeHttpAddress; } public TaskAttemptFinishedEvent() { @@ -129,6 +147,15 @@ public class TaskAttemptFinishedEvent implements HistoryEvent { builder.addDataEvents(DataEventDependencyInfo.toProto(info)); } } + if (containerId != null) { + builder.setContainerId(containerId.toString()); + } + if (nodeId != null) { + builder.setNodeId(nodeId.toString()); + } + if (nodeHttpAddress != null) { + builder.setNodeHttpAddress(nodeHttpAddress); + } return builder.build(); } @@ -158,6 +185,15 @@ public class TaskAttemptFinishedEvent implements HistoryEvent { this.dataEvents.add(DataEventDependencyInfo.fromProto(protoEvent)); } } + if (proto.hasContainerId()) { + this.containerId = ConverterUtils.toContainerId(proto.getContainerId()); + } + if (proto.hasNodeId()) { + this.nodeId = ConverterUtils.toNodeId(proto.getNodeId()); + } + if (proto.hasNodeHttpAddress()) { + this.nodeHttpAddress = proto.getNodeHttpAddress(); + } } @Override @@ -193,6 +229,9 @@ public class TaskAttemptFinishedEvent implements HistoryEvent { + ", status=" + state.name() + ", errorEnum=" + (error != null ? error.name() : "") + ", diagnostics=" + diagnostics + + ", containerId=" + (containerId != null ? containerId.toString() : "") + + ", nodeId=" + (nodeId != null ? nodeId.toString() : "") + + ", nodeHttpAddress=" + (nodeHttpAddress != null ? nodeHttpAddress : "") + counterStr; } @@ -236,4 +275,24 @@ public class TaskAttemptFinishedEvent implements HistoryEvent { return creationCausalTA; } + public ContainerId getContainerId() { + return containerId; + } + + public NodeId getNodeId() { + return nodeId; + } + + public String getInProgressLogsUrl() { + return inProgressLogsUrl; + } + + public String getCompletedLogsUrl() { + return completedLogsUrl; + } + + public String getNodeHttpAddress() { + return nodeHttpAddress; + } + } http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/main/java/org/apache/tez/dag/history/logging/impl/HistoryEventJsonConversion.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/main/java/org/apache/tez/dag/history/logging/impl/HistoryEventJsonConversion.java b/tez-dag/src/main/java/org/apache/tez/dag/history/logging/impl/HistoryEventJsonConversion.java index bf63045..d4412f7 100644 --- a/tez-dag/src/main/java/org/apache/tez/dag/history/logging/impl/HistoryEventJsonConversion.java +++ b/tez-dag/src/main/java/org/apache/tez/dag/history/logging/impl/HistoryEventJsonConversion.java @@ -556,6 +556,22 @@ public class HistoryEventJsonConversion { otherInfo.put(ATSConstants.LAST_DATA_EVENTS, DAGUtils.convertDataEventDependencyInfoToJSON(event.getDataEvents())); } + if (event.getNodeId() != null) { + otherInfo.put(ATSConstants.NODE_ID, event.getNodeId().toString()); + } + if (event.getContainerId() != null) { + otherInfo.put(ATSConstants.CONTAINER_ID, event.getContainerId().toString()); + } + if (event.getInProgressLogsUrl() != null) { + otherInfo.put(ATSConstants.IN_PROGRESS_LOGS_URL, event.getInProgressLogsUrl()); + } + if (event.getCompletedLogsUrl() != null) { + otherInfo.put(ATSConstants.COMPLETED_LOGS_URL, event.getCompletedLogsUrl()); + } + if (event.getNodeHttpAddress() != null) { + otherInfo.put(ATSConstants.NODE_HTTP_ADDRESS, event.getNodeHttpAddress()); + } + jsonObject.put(ATSConstants.OTHER_INFO, otherInfo); return jsonObject; http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/main/proto/HistoryEvents.proto ---------------------------------------------------------------------- diff --git a/tez-dag/src/main/proto/HistoryEvents.proto b/tez-dag/src/main/proto/HistoryEvents.proto index 5392d8a..8c948e4 100644 --- a/tez-dag/src/main/proto/HistoryEvents.proto +++ b/tez-dag/src/main/proto/HistoryEvents.proto @@ -183,6 +183,9 @@ message TaskAttemptFinishedProto { optional TezCountersProto counters = 9; optional string error_enum = 10; repeated DataEventDependencyInfoProto data_events = 11; + optional string container_id = 13; + optional string node_id = 14; + optional string node_http_address = 15; } message EventMetaDataProto { http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskAttempt.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskAttempt.java b/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskAttempt.java index 4370f50..6f06f2d 100644 --- a/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskAttempt.java +++ b/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskAttempt.java @@ -416,7 +416,7 @@ public class TestTaskAttempt { arg.getAllValues().subList(expectedEventsAtRunning, expectedEvenstAfterTerminating), DAGEventCounterUpdate.class, 1); - taImpl.handle(new TaskAttemptEventContainerTerminated(taskAttemptID, + taImpl.handle(new TaskAttemptEventContainerTerminated(contId, taskAttemptID, "Terminated", TaskAttemptTerminationCause.CONTAINER_EXITED)); // verify unregister is not invoked again verify(mockHeartbeatHandler, times(1)).unregister(taskAttemptID); @@ -484,7 +484,7 @@ public class TestTaskAttempt { TaskAttemptState.RUNNING); verify(mockHeartbeatHandler).register(taskAttemptID); - taImpl.handle(new TaskAttemptEventContainerTerminated(taskAttemptID, "Terminated", + taImpl.handle(new TaskAttemptEventContainerTerminated(contId, taskAttemptID, "Terminated", TaskAttemptTerminationCause.CONTAINER_EXITED)); assertFalse( "InternalError occurred trying to handle TA_CONTAINER_TERMINATED", @@ -574,7 +574,7 @@ public class TestTaskAttempt { arg.getAllValues().subList(expectedEventsAtRunning, expectedEvenstAfterTerminating), DAGEventCounterUpdate.class, 1); - taImpl.handle(new TaskAttemptEventContainerTerminated(taskAttemptID, + taImpl.handle(new TaskAttemptEventContainerTerminated(contId, taskAttemptID, "Terminated", TaskAttemptTerminationCause.CONTAINER_EXITED)); // verify unregister is not invoked again verify(mockHeartbeatHandler, times(1)).unregister(taskAttemptID); @@ -748,7 +748,7 @@ public class TestTaskAttempt { assertEquals("0", taImpl.getDiagnostics().get(0)); assertEquals(TaskAttemptTerminationCause.APPLICATION_ERROR, taImpl.getTerminationCause()); - taImpl.handle(new TaskAttemptEventContainerTerminated(taskAttemptID, "1", + taImpl.handle(new TaskAttemptEventContainerTerminated(contId, taskAttemptID, "1", TaskAttemptTerminationCause.CONTAINER_EXITED)); // verify unregister is not invoked again verify(mockHeartbeatHandler, times(1)).unregister(taskAttemptID); http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskAttemptRecovery.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskAttemptRecovery.java b/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskAttemptRecovery.java index be0b3ad..cd37ab9 100644 --- a/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskAttemptRecovery.java +++ b/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskAttemptRecovery.java @@ -182,7 +182,7 @@ public class TestTaskAttemptRecovery { TaskAttemptState recoveredState = ta.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, startTime, finishTime, state, errorEnum, diag, counters, events, creationTime, - causalId, allocationTime)); + causalId, allocationTime, null, null, null, null, null)); assertEquals(causalId, ta.getCreationCausalAttempt()); assertEquals(creationTime, ta.getCreationTime()); assertEquals(allocationTime, ta.getAllocationTime()); @@ -321,7 +321,7 @@ public class TestTaskAttemptRecovery { TaskAttemptState recoveredState = ta.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, startTime, finishTime, TaskAttemptState.KILLED, - TaskAttemptTerminationCause.APPLICATION_ERROR, "", new TezCounters(), null, 0, null, 0)); + TaskAttemptTerminationCause.APPLICATION_ERROR, "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskAttemptState.KILLED, recoveredState); } } http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskRecovery.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskRecovery.java b/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskRecovery.java index e9df97b..52421ba 100644 --- a/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskRecovery.java +++ b/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskRecovery.java @@ -286,7 +286,7 @@ public class TestTaskRecovery { restoreFromTaskStartEvent(); TezTaskAttemptID taId = getNewTaskAttemptID(task.getTaskId()); task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, - 0L, 0L, TaskAttemptState.KILLED, TaskAttemptTerminationCause.TERMINATED_BY_CLIENT,"", new TezCounters(), null, 0, null, 0)); + 0L, 0L, TaskAttemptState.KILLED, TaskAttemptTerminationCause.TERMINATED_BY_CLIENT,"", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); task.handle(new TaskEventRecoverTask(task.getTaskId())); // wait for the second task attempt is scheduled dispatcher.await(); @@ -307,7 +307,7 @@ public class TestTaskRecovery { restoreFromTaskStartEvent(); TezTaskAttemptID taId = getNewTaskAttemptID(task.getTaskId()); task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, - 0L, 0L, TaskAttemptState.FAILED, TaskAttemptTerminationCause.CONTAINER_LAUNCH_FAILED,"", new TezCounters(), null, 0, null, 0)); + 0L, 0L, TaskAttemptState.FAILED, TaskAttemptTerminationCause.CONTAINER_LAUNCH_FAILED,"", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); task.handle(new TaskEventRecoverTask(task.getTaskId())); // wait for the second task attempt is scheduled dispatcher.await(); @@ -329,7 +329,7 @@ public class TestTaskRecovery { TezTaskAttemptID taId = getNewTaskAttemptID(task.getTaskId()); try { task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, - 0L, 0L, TaskAttemptState.SUCCEEDED, null ,"", new TezCounters(), null, 0, null, 0)); + 0L, 0L, TaskAttemptState.SUCCEEDED, null ,"", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); fail("Should fail due to no TaskAttemptStartedEvent but with TaskAttemptFinishedEvent(Succeeded)"); } catch (TezUncheckedException e) { assertTrue(e.getMessage().contains("Could not find task attempt when trying to recover")); @@ -372,7 +372,7 @@ public class TestTaskRecovery { TaskState recoveredState = task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, taStartTime, taFinishTime, TaskAttemptState.SUCCEEDED, null, - "", new TezCounters(), null, 0, null, 0)); + "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskState.SUCCEEDED, recoveredState); assertEquals(1, task.getAttempts().size()); assertEquals(1, task.getFinishedAttemptsCount()); @@ -405,7 +405,7 @@ public class TestTaskRecovery { TaskState recoveredState = task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, taStartTime, taFinishTime, TaskAttemptState.FAILED, null, - "", new TezCounters(), null, 0, null, 0)); + "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskState.RUNNING, recoveredState); assertEquals(1, task.getAttempts().size()); assertEquals(1, task.getFinishedAttemptsCount()); @@ -438,7 +438,7 @@ public class TestTaskRecovery { TaskState recoveredState = task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, taStartTime, taFinishTime, TaskAttemptState.KILLED, null, - "", new TezCounters(), null, 0, null, 0)); + "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskState.RUNNING, recoveredState); assertEquals(1, task.getAttempts().size()); assertEquals(1, task.getFinishedAttemptsCount()); @@ -473,7 +473,7 @@ public class TestTaskRecovery { TaskState recoveredState = task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, taStartTime, taFinishTime, TaskAttemptState.SUCCEEDED, null, - "", new TezCounters(), null, 0, null, 0)); + "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskState.SUCCEEDED, recoveredState); assertEquals(1, task.getAttempts().size()); assertEquals(1, task.getFinishedAttemptsCount()); @@ -516,7 +516,7 @@ public class TestTaskRecovery { TaskState recoveredState = task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, taStartTime, taFinishTime, TaskAttemptState.SUCCEEDED, null, - "", new TezCounters(), null, 0, null, 0)); + "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskState.SUCCEEDED, recoveredState); assertEquals(1, task.getAttempts().size()); assertEquals(1, task.getFinishedAttemptsCount()); @@ -528,7 +528,7 @@ public class TestTaskRecovery { recoveredState = task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, taStartTime, taFinishTime, TaskAttemptState.FAILED, null, - "", new TezCounters(), null, 0, null, 0)); + "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskState.RUNNING, recoveredState); assertEquals(1, task.getAttempts().size()); assertEquals(1, task.getFinishedAttemptsCount()); @@ -563,7 +563,7 @@ public class TestTaskRecovery { TaskState recoveredState = task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, taStartTime, taFinishTime, TaskAttemptState.SUCCEEDED, null, - "", new TezCounters(), null, 0, null, 0)); + "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskState.SUCCEEDED, recoveredState); assertEquals(1, task.getAttempts().size()); assertEquals(1, task.getFinishedAttemptsCount()); @@ -575,7 +575,7 @@ public class TestTaskRecovery { recoveredState = task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, taStartTime, taFinishTime, TaskAttemptState.KILLED, null, - "", new TezCounters(), null, 0, null, 0)); + "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskState.RUNNING, recoveredState); assertEquals(1, task.getAttempts().size()); assertEquals(1, task.getFinishedAttemptsCount()); @@ -614,7 +614,7 @@ public class TestTaskRecovery { TaskState recoveredState = task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, taStartTime, taFinishTime, TaskAttemptState.SUCCEEDED, null, - "", new TezCounters(), null, 0, null, 0)); + "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskState.SUCCEEDED, recoveredState); assertEquals(1, task.getAttempts().size()); assertEquals(1, task.getFinishedAttemptsCount()); @@ -654,7 +654,7 @@ public class TestTaskRecovery { TaskState recoveredState = task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, taStartTime, taFinishTime, TaskAttemptState.SUCCEEDED, null, - "", new TezCounters(), null, 0, null, 0)); + "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskState.SUCCEEDED, recoveredState); assertEquals(1, task.getAttempts().size()); assertEquals(1, task.getFinishedAttemptsCount()); @@ -735,7 +735,7 @@ public class TestTaskRecovery { recoveredState = task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, taStartTime, taFinishTime, TaskAttemptState.KILLED, null, - "", new TezCounters(), null, 0, null, 0)); + "", new TezCounters(), null, 0, null, 0, null, null, null, null, null)); assertEquals(TaskState.RUNNING, recoveredState); assertEquals(TaskAttemptStateInternal.NEW, ((TaskAttemptImpl) task.getAttempt(taId)).getInternalState()); @@ -776,7 +776,7 @@ public class TestTaskRecovery { task.restoreFromEvent(new TaskAttemptStartedEvent(taId, vertexName, 0L, mock(ContainerId.class), mock(NodeId.class), "", "", "")); task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, 0, - 0, TaskAttemptState.KILLED, null, "", null, null, 0, null, 0)); + 0, TaskAttemptState.KILLED, null, "", null, null, 0, null, 0, null, null, null, null, null)); } assertEquals(maxFailedAttempts, task.getAttempts().size()); assertEquals(0, task.failedAttempts); @@ -806,7 +806,7 @@ public class TestTaskRecovery { task.restoreFromEvent(new TaskAttemptStartedEvent(taId, vertexName, 0L, mock(ContainerId.class), mock(NodeId.class), "", "", "")); task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, 0, - 0, TaskAttemptState.FAILED, null, "", null, null, 0, null, 0)); + 0, TaskAttemptState.FAILED, null, "", null, null, 0, null, 0, null, null, null, null, null)); } assertEquals(maxFailedAttempts, task.getAttempts().size()); assertEquals(maxFailedAttempts, task.failedAttempts); @@ -836,7 +836,7 @@ public class TestTaskRecovery { task.restoreFromEvent(new TaskAttemptStartedEvent(taId, vertexName, 0L, mock(ContainerId.class), mock(NodeId.class), "", "", "")); task.restoreFromEvent(new TaskAttemptFinishedEvent(taId, vertexName, 0, - 0, TaskAttemptState.FAILED, null, "", null, null, 0, null, 0)); + 0, TaskAttemptState.FAILED, null, "", null, null, 0, null, 0, null, null, null, null, null)); } assertEquals(maxFailedAttempts - 1, task.getAttempts().size()); assertEquals(maxFailedAttempts - 1, task.failedAttempts); http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/test/java/org/apache/tez/dag/history/events/TestHistoryEventsProtoConversion.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/test/java/org/apache/tez/dag/history/events/TestHistoryEventsProtoConversion.java b/tez-dag/src/test/java/org/apache/tez/dag/history/events/TestHistoryEventsProtoConversion.java index b0b76d4..3e93ad0 100644 --- a/tez-dag/src/test/java/org/apache/tez/dag/history/events/TestHistoryEventsProtoConversion.java +++ b/tez-dag/src/test/java/org/apache/tez/dag/history/events/TestHistoryEventsProtoConversion.java @@ -501,7 +501,11 @@ public class TestHistoryEventsProtoConversion { "vertex1", 10001l, 1000434444l, TaskAttemptState.FAILED, null, null, null, null, 2048, TezTaskAttemptID.getInstance(TezTaskID.getInstance(TezVertexID.getInstance( - TezDAGID.getInstance(ApplicationId.newInstance(0, 1), 1), 111), 1), 0), 1024); + TezDAGID.getInstance(ApplicationId.newInstance(0, 1), 1), 111), 1), 0), 1024, + ContainerId.newInstance( + ApplicationAttemptId.newInstance( + ApplicationId.newInstance(0, 1), 1), 1001), NodeId.newInstance( + "host1", 19999), "inProgress", "Completed", "nodeHttpAddress"); TaskAttemptFinishedEvent deserializedEvent = (TaskAttemptFinishedEvent) testProtoConversion(event); Assert.assertEquals(event.getTaskAttemptID(), @@ -522,6 +526,12 @@ public class TestHistoryEventsProtoConversion { deserializedEvent.getState()); Assert.assertEquals(event.getCounters(), deserializedEvent.getCounters()); + Assert.assertEquals(event.getContainerId(), + deserializedEvent.getContainerId()); + Assert.assertEquals(event.getNodeId(), + deserializedEvent.getNodeId()); + Assert.assertEquals(event.getNodeHttpAddress(), + deserializedEvent.getNodeHttpAddress()); logEvents(event, deserializedEvent); } { @@ -535,7 +545,11 @@ public class TestHistoryEventsProtoConversion { TezTaskAttemptID.getInstance(TezTaskID.getInstance(TezVertexID.getInstance( TezDAGID.getInstance(ApplicationId.newInstance(0, 1), 1), 111), 1), 1), "vertex1", 10001l, 1000434444l, TaskAttemptState.FAILED, - TaskAttemptTerminationCause.APPLICATION_ERROR, "diagnose", new TezCounters(), events, 0, null, 0); + TaskAttemptTerminationCause.APPLICATION_ERROR, "diagnose", new TezCounters(), events, 0, null, 0, + ContainerId.newInstance( + ApplicationAttemptId.newInstance( + ApplicationId.newInstance(0, 1), 1), 1001), NodeId.newInstance( + "host1", 19999), "inProgress", "Completed", "nodeHttpAddress"); TaskAttemptFinishedEvent deserializedEvent = (TaskAttemptFinishedEvent) testProtoConversion(event); Assert.assertEquals(event.getTaskAttemptID(), @@ -548,6 +562,12 @@ public class TestHistoryEventsProtoConversion { deserializedEvent.getState()); Assert.assertEquals(event.getCounters(), deserializedEvent.getCounters()); + Assert.assertEquals(event.getContainerId(), + deserializedEvent.getContainerId()); + Assert.assertEquals(event.getNodeId(), + deserializedEvent.getNodeId()); + Assert.assertEquals(event.getNodeHttpAddress(), + deserializedEvent.getNodeHttpAddress()); Assert.assertEquals(event.getTaskAttemptError(), deserializedEvent.getTaskAttemptError()); Assert.assertEquals(events.size(), event.getDataEvents().size()); http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-dag/src/test/java/org/apache/tez/dag/history/logging/impl/TestHistoryEventJsonConversion.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/test/java/org/apache/tez/dag/history/logging/impl/TestHistoryEventJsonConversion.java b/tez-dag/src/test/java/org/apache/tez/dag/history/logging/impl/TestHistoryEventJsonConversion.java index cfe9618..9d7d8bc 100644 --- a/tez-dag/src/test/java/org/apache/tez/dag/history/logging/impl/TestHistoryEventJsonConversion.java +++ b/tez-dag/src/test/java/org/apache/tez/dag/history/logging/impl/TestHistoryEventJsonConversion.java @@ -164,7 +164,8 @@ public class TestHistoryEventJsonConversion { break; case TASK_ATTEMPT_FINISHED: event = new TaskAttemptFinishedEvent(tezTaskAttemptID, "v1", random.nextInt(), - random.nextInt(), TaskAttemptState.KILLED, TaskAttemptTerminationCause.TERMINATED_BY_CLIENT, null, null, null, 0, null, 0); + random.nextInt(), TaskAttemptState.KILLED, TaskAttemptTerminationCause.TERMINATED_BY_CLIENT, null, null, null, 0, null, 0, + containerId, nodeId, null, null, "nodeHttpAddress"); break; case CONTAINER_LAUNCHED: event = new ContainerLaunchedEvent(containerId, random.nextInt(), http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-plugins/tez-yarn-timeline-history/src/main/java/org/apache/tez/dag/history/logging/ats/HistoryEventTimelineConversion.java ---------------------------------------------------------------------- diff --git a/tez-plugins/tez-yarn-timeline-history/src/main/java/org/apache/tez/dag/history/logging/ats/HistoryEventTimelineConversion.java b/tez-plugins/tez-yarn-timeline-history/src/main/java/org/apache/tez/dag/history/logging/ats/HistoryEventTimelineConversion.java index 0fd962f..f6beb99 100644 --- a/tez-plugins/tez-yarn-timeline-history/src/main/java/org/apache/tez/dag/history/logging/ats/HistoryEventTimelineConversion.java +++ b/tez-plugins/tez-yarn-timeline-history/src/main/java/org/apache/tez/dag/history/logging/ats/HistoryEventTimelineConversion.java @@ -464,6 +464,22 @@ public class HistoryEventTimelineConversion { atsEntity.addOtherInfo(ATSConstants.LAST_DATA_EVENTS, DAGUtils.convertDataEventDependecyInfoToATS(event.getDataEvents())); } + if (event.getNodeId() != null) { + atsEntity.addOtherInfo(ATSConstants.NODE_ID, event.getNodeId().toString()); + } + if (event.getContainerId() != null) { + atsEntity.addOtherInfo(ATSConstants.CONTAINER_ID, event.getContainerId().toString()); + } + if (event.getInProgressLogsUrl() != null) { + atsEntity.addOtherInfo(ATSConstants.IN_PROGRESS_LOGS_URL, event.getInProgressLogsUrl()); + } + if (event.getCompletedLogsUrl() != null) { + atsEntity.addOtherInfo(ATSConstants.COMPLETED_LOGS_URL, event.getCompletedLogsUrl()); + } + if (event.getNodeHttpAddress() != null) { + atsEntity.addOtherInfo(ATSConstants.NODE_HTTP_ADDRESS, event.getNodeHttpAddress()); + } + return atsEntity; } http://git-wip-us.apache.org/repos/asf/tez/blob/1cb6e0f8/tez-plugins/tez-yarn-timeline-history/src/test/java/org/apache/tez/dag/history/logging/ats/TestHistoryEventTimelineConversion.java ---------------------------------------------------------------------- diff --git a/tez-plugins/tez-yarn-timeline-history/src/test/java/org/apache/tez/dag/history/logging/ats/TestHistoryEventTimelineConversion.java b/tez-plugins/tez-yarn-timeline-history/src/test/java/org/apache/tez/dag/history/logging/ats/TestHistoryEventTimelineConversion.java index 38ccf65..e4b4990 100644 --- a/tez-plugins/tez-yarn-timeline-history/src/test/java/org/apache/tez/dag/history/logging/ats/TestHistoryEventTimelineConversion.java +++ b/tez-plugins/tez-yarn-timeline-history/src/test/java/org/apache/tez/dag/history/logging/ats/TestHistoryEventTimelineConversion.java @@ -183,7 +183,8 @@ public class TestHistoryEventTimelineConversion { break; case TASK_ATTEMPT_FINISHED: event = new TaskAttemptFinishedEvent(tezTaskAttemptID, "v1", random.nextInt(), - random.nextInt(), TaskAttemptState.FAILED, TaskAttemptTerminationCause.OUTPUT_LOST, null, null, null, 0, null, 0); + random.nextInt(), TaskAttemptState.FAILED, TaskAttemptTerminationCause.OUTPUT_LOST, null, null, null, 0, null, 0, + containerId, nodeId, null, null, "nodeHttpAddress"); break; case CONTAINER_LAUNCHED: event = new ContainerLaunchedEvent(containerId, random.nextInt(), @@ -520,7 +521,7 @@ public class TestHistoryEventTimelineConversion { TaskAttemptFinishedEvent event = new TaskAttemptFinishedEvent(tezTaskAttemptID, vertexName, startTime, finishTime, state, error, diagnostics, counters, events, creationTime, - tezTaskAttemptID, allocationTime); + tezTaskAttemptID, allocationTime, containerId, nodeId, "inProgressURL", "logsURL", "nodeHttpAddress"); TimelineEntity timelineEntity = HistoryEventTimelineConversion.convertToTimelineEntity(event); Assert.assertEquals(tezTaskAttemptID.toString(), timelineEntity.getEntityId()); Assert.assertEquals(EntityTypes.TEZ_TASK_ATTEMPT_ID.name(), timelineEntity.getEntityType()); @@ -543,7 +544,7 @@ public class TestHistoryEventTimelineConversion { Assert.assertEquals(finishTime, evt.getTimestamp()); final Map<String, Object> otherInfo = timelineEntity.getOtherInfo(); - Assert.assertEquals(11, otherInfo.size()); + Assert.assertEquals(16, otherInfo.size()); Assert.assertEquals(tezTaskAttemptID.toString(), timelineEntity.getOtherInfo().get(ATSConstants.CREATION_CAUSAL_ATTEMPT)); Assert.assertEquals(creationTime, timelineEntity.getOtherInfo().get(ATSConstants.CREATION_TIME)); @@ -560,6 +561,11 @@ public class TestHistoryEventTimelineConversion { Map<String, Object> obj3 = (Map<String, Object>) obj2.get(0); Assert.assertEquals(events.get(0).getTimestamp(), obj3.get(ATSConstants.TIMESTAMP)); Assert.assertTrue(otherInfo.containsKey(ATSConstants.COUNTERS)); + Assert.assertEquals("inProgressURL", otherInfo.get(ATSConstants.IN_PROGRESS_LOGS_URL)); + Assert.assertEquals("logsURL", otherInfo.get(ATSConstants.COMPLETED_LOGS_URL)); + Assert.assertEquals(nodeId.toString(), otherInfo.get(ATSConstants.NODE_ID)); + Assert.assertEquals(containerId.toString(), otherInfo.get(ATSConstants.CONTAINER_ID)); + Assert.assertEquals("nodeHttpAddress", otherInfo.get(ATSConstants.NODE_HTTP_ADDRESS)); } @Test(timeout = 5000)
