diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Priority.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Priority.java index c522a63..e2b0df3 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Priority.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Priority.java @@ -24,8 +24,7 @@ /** * The priority assigned to a ResourceRequest or Application or Container - * allocation - * + * allocation. Smaller value means higher priority. */ @Public @Stable @@ -81,7 +80,8 @@ public boolean equals(Object obj) { @Override public int compareTo(Priority other) { - return other.getPriority() - this.getPriority(); + // Smaller value means higher priority + return this.getPriority() - other.getPriority(); } @Override diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/scheduler/SchedulerRequestKey.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/scheduler/SchedulerRequestKey.java index c4f37f6..e3662b8 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/scheduler/SchedulerRequestKey.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/scheduler/SchedulerRequestKey.java @@ -111,7 +111,7 @@ public int compareTo(SchedulerRequestKey o) { return 1; } - int priorityCompare = o.getPriority().compareTo(priority); + int priorityCompare = priority.compareTo(o.getPriority()); // we first sort by priority and then by allocationRequestId if (priorityCompare != 0) { return priorityCompare; diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestAppSchedulingInfo.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestAppSchedulingInfo.java index bb29889..3c73d99 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestAppSchedulingInfo.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestAppSchedulingInfo.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Set; import java.util.TreeSet; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; @@ -171,4 +172,44 @@ public void testSchedulerKeyAccounting() { info.updateResourceRequests(reqs, false); Assert.assertEquals(0, info.getSchedulerKeys().size()); } + + @Test + public void testSchedulerKeyPriorityOrder() { + Resource r = Resource.newInstance(1024, 1); + + Priority p1 = Priority.newInstance(1); + Priority p2 = Priority.newInstance(2); + Priority p3 = Priority.newInstance(3); + + SchedulerRequestKey sk1 = SchedulerRequestKey + .create(ResourceRequest.newInstance(p1, "foo", r, 1)); + SchedulerRequestKey sk2 = SchedulerRequestKey + .create(ResourceRequest.newInstance(p2, "foo", r, 1)); + SchedulerRequestKey sk3 = SchedulerRequestKey + .create(ResourceRequest.newInstance(p3, "foo", r, 1)); + + Set s1 = new TreeSet<>(); + s1.add(sk2); + s1.add(sk1); + s1.add(sk3); + + Set s2 = new TreeSet<>(); + s2.add(p2); + s2.add(p1); + s2.add(p3); + + List expectedOrder = new ArrayList<>(); + s2.add(p1); + s2.add(p2); + s2.add(p3); + + Assert.assertEquals(s1.size(), 3); + Assert.assertEquals(s2.size(), 3); + Iterator iter1 = s1.iterator(); + Iterator iter2 = s2.iterator(); + for (Priority expected : expectedOrder) { + Assert.assertTrue(iter1.next().getPriority().equals(expected)); + Assert.assertTrue(iter2.next().equals(expected)); + } + } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerUtils.java index cb1f794..571bdff 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerUtils.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerUtils.java @@ -709,7 +709,7 @@ private void waitForLaunchedState(RMAppAttempt attempt) public void testComparePriorities(){ Priority high = Priority.newInstance(1); Priority low = Priority.newInstance(2); - assertTrue(high.compareTo(low) > 0); + assertTrue(high.compareTo(low) < 0); } @Test