diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/MemoryTimelineStore.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/MemoryTimelineStore.java index 3489114..94d0f20 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/MemoryTimelineStore.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/MemoryTimelineStore.java @@ -30,7 +30,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.PriorityQueue; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -67,6 +66,8 @@ private Map entities = new HashMap(); + private TreeSet entitiesSet = + new TreeSet(); private Map entityInsertTimes = new HashMap(); private Map domainsById = @@ -103,13 +104,11 @@ public synchronized TimelineEntities getEntities(String entityType, Long limit, if (firstEntity == null) { return new TimelineEntities(); } else { - entityIterator = new TreeSet(entities.values()) - .tailSet(firstEntity, true).iterator(); + entityIterator = entitiesSet.tailSet(firstEntity, true).iterator(); } } if (entityIterator == null) { - entityIterator = new PriorityQueue(entities.values()) - .iterator(); + entityIterator = entitiesSet.iterator(); } List entitiesSelected = new ArrayList(); @@ -156,11 +155,11 @@ public synchronized TimelineEntities getEntities(String entityType, Long limit, entitiesSelected.add(entity); } } - List entitiesToReturn = new ArrayList(); + List entitiesToReturn = + new ArrayList(entitiesSelected.size()); for (TimelineEntity entitySelected : entitiesSelected) { entitiesToReturn.add(maskFields(entitySelected, fields)); } - Collections.sort(entitiesToReturn); TimelineEntities entitiesWrapper = new TimelineEntities(); entitiesWrapper.setEntities(entitiesToReturn); return entitiesWrapper; @@ -307,6 +306,7 @@ public synchronized TimelinePutResponse put(TimelineEntities data) { } existingEntity.setDomainId(entity.getDomainId()); entities.put(entityId, existingEntity); + entitiesSet.add(existingEntity); entityInsertTimes.put(entityId, System.currentTimeMillis()); } if (entity.getEvents() != null) { @@ -395,6 +395,7 @@ public synchronized TimelinePutResponse put(TimelineEntities data) { existingEntity.getEntityId()); relatedEntity.setDomainId(existingEntity.getDomainId()); entities.put(relatedEntityId, relatedEntity); + entitiesSet.add(relatedEntity); entityInsertTimes.put(relatedEntityId, System.currentTimeMillis()); } }