diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/timelineservice/NMTimelinePublisher.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/timelineservice/NMTimelinePublisher.java index c4d45a9..dcfab2e 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/timelineservice/NMTimelinePublisher.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/timelineservice/NMTimelinePublisher.java @@ -29,6 +29,7 @@ import org.apache.hadoop.service.CompositeService; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ContainerId; +import org.apache.hadoop.yarn.api.records.ContainerState; import org.apache.hadoop.yarn.api.records.ContainerStatus; import org.apache.hadoop.yarn.api.records.NodeId; import org.apache.hadoop.yarn.api.records.Resource; @@ -203,9 +204,19 @@ private void publishContainerFinishedEvent(ContainerStatus containerStatus, containerStatus.getDiagnostics()); eventInfo.put(ContainerMetricsConstants.EXIT_STATUS_EVENT_INFO, containerStatus.getExitStatus()); - eventInfo.put(ContainerMetricsConstants.STATE_EVENT_INFO, containerStatus - .getState().toString()); - + // since this is a container finished event, we should ensure + // that container status is COMPLETE + if ( ContainerState.COMPLETE != containerStatus.getState()) { + if (LOG.isWarnEnabled()) { + LOG.warn( + "While publishing ContainerFinishedEvent, container state was still " + + containerStatus.getState() + " for " + + containerStatus.getContainerId() + ", hence publishing it as " + + ContainerState.COMPLETE.toString() + " in Timeline Service"); + } + } + eventInfo.put(ContainerMetricsConstants.STATE_EVENT_INFO, + ContainerState.COMPLETE.toString()); TimelineEvent tEvent = new TimelineEvent(); tEvent.setId(ContainerMetricsConstants.FINISHED_EVENT_TYPE); tEvent.setTimestamp(timeStamp); @@ -402,4 +413,4 @@ public void setTimelineServiceAddress(ApplicationId appId, private TimelineClient getTimelineClient(ApplicationId appId) { return appToClientMap.get(appId); } -} \ No newline at end of file +}