diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/timelineservice/NMTimelinePublisher.java b/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 39a6181..15e2df0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/timelineservice/NMTimelinePublisher.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/timelineservice/NMTimelinePublisher.java @@ -28,7 +28,9 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.service.CompositeService; import org.apache.hadoop.yarn.api.records.ApplicationId; +import org.apache.hadoop.yarn.api.records.ContainerExitStatus; 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; @@ -194,10 +196,25 @@ private void publishContainerFinishedEvent(ContainerStatus containerStatus, Map eventInfo = new HashMap(); eventInfo.put(ContainerMetricsConstants.DIAGNOSTICS_INFO_EVENT_INFO, containerStatus.getDiagnostics()); + int containerExitStatus = containerStatus.getExitStatus(); eventInfo.put(ContainerMetricsConstants.EXIT_STATUS_EVENT_INFO, - containerStatus.getExitStatus()); - eventInfo.put(ContainerMetricsConstants.STATE_EVENT_INFO, containerStatus - .getState().toString()); + containerExitStatus); + if (containerExitStatus != ContainerExitStatus.INVALID) { + eventInfo.put(ContainerMetricsConstants.STATE_EVENT_INFO, + containerStatus.getState().toString()); + } else { + // most likely the container has not transitioned + // it's state from Running yet YARN-5156 + eventInfo.put(ContainerMetricsConstants.STATE_EVENT_INFO, + ContainerState.COMPLETE.toString()); + 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 ATS"); + } + } TimelineEvent tEvent = new TimelineEvent(); tEvent.setId(ContainerMetricsConstants.FINISHED_EVENT_TYPE);