tez-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jeag...@apache.org
Subject tez git commit: TEZ-2863. Container, node, and logs not available in UI for tasks that fail to launch (jeagles)
Date Tue, 08 Mar 2016 23:33:40 GMT
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 <jeagles@yahoo-inc.com>
Authored: Tue Mar 8 17:33:26 2016 -0600
Committer: Jonathan Eagles <jeagles@yahoo-inc.com>
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)


Mime
View raw message