diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryManagerOnTimelineStore.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryManagerOnTimelineStore.java index 51e2356..10e1481 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryManagerOnTimelineStore.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryManagerOnTimelineStore.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.util.Collection; +import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; @@ -352,6 +353,10 @@ private static ApplicationReportExt convertToApplicationReport( } List events = entity.getEvents(); if (events != null) { + // Right now, the sequence of events is ordered by the timestamp + // Descending. We should revert the ordering. So, the state information + // could be override by the later events. + Collections.reverse(events); for (TimelineEvent event : events) { if (event.getEventType().equals( ApplicationMetricsConstants.CREATED_EVENT_TYPE)) { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryManagerOnTimelineStore.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryManagerOnTimelineStore.java index 3c97584..9af9cae 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryManagerOnTimelineStore.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryManagerOnTimelineStore.java @@ -539,23 +539,26 @@ private static TimelineEntity createApplicationTimelineEntity( entity.addEvent(tEvent); if (enableUpdateEvent) { tEvent = new TimelineEvent(); - createAppModifiedEvent(appId, tEvent, "changed queue", 5); + createAppModifiedEvent(appId, tEvent, "changed queue", 5, + Integer.MAX_VALUE + 5L + appId.getId()); entity.addEvent(tEvent); // Change priority alone tEvent = new TimelineEvent(); - createAppModifiedEvent(appId, tEvent, "changed queue", 6); + createAppModifiedEvent(appId, tEvent, "changed queue", 6, + Integer.MAX_VALUE + 6L + appId.getId()); // Now change queue tEvent = new TimelineEvent(); - createAppModifiedEvent(appId, tEvent, "changed queue1", 6); + createAppModifiedEvent(appId, tEvent, "changed queue1", 6, + Integer.MAX_VALUE + 7L + appId.getId()); entity.addEvent(tEvent); } return entity; } private static void createAppModifiedEvent(ApplicationId appId, - TimelineEvent tEvent, String queue, int priority) { + TimelineEvent tEvent, String queue, int priority, long timeStamp) { tEvent.setEventType(ApplicationMetricsConstants.UPDATED_EVENT_TYPE); - tEvent.setTimestamp(Integer.MAX_VALUE + 4L + appId.getId()); + tEvent.setTimestamp(timeStamp); Map eventInfo = new HashMap(); eventInfo.put(ApplicationMetricsConstants.QUEUE_ENTITY_INFO, queue); eventInfo.put(ApplicationMetricsConstants.APPLICATION_PRIORITY_INFO,