diff --git a/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml b/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml index c79a35e..6fb3945 100644 --- a/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml +++ b/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml @@ -159,6 +159,10 @@ + + + + diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/FifoComparator.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/FifoComparator.java index 1045386..52fbf7b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/FifoComparator.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/FifoComparator.java @@ -18,25 +18,16 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler.policy; -import java.util.*; - -import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.*; +import java.util.Comparator; /** * A Comparator which orders SchedulableEntities by input order */ -public class FifoComparator - implements Comparator { - - @Override +public class FifoComparator implements Comparator { + + @Override public int compare(SchedulableEntity r1, SchedulableEntity r2) { - if (r1.getPriority() != null - && !r1.getPriority().equals(r2.getPriority())) { - return r1.getPriority().compareTo(r2.getPriority()); - } int res = r1.compareInputOrderTo(r2); return res; } } - diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/FifoOrderingPolicy.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/FifoOrderingPolicy.java index 74a422c..edd7b4a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/FifoOrderingPolicy.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/FifoOrderingPolicy.java @@ -18,34 +18,44 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler.policy; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.TreeSet; + import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.*; /** * An OrderingPolicy which orders SchedulableEntities by input order */ -public class FifoOrderingPolicy extends AbstractComparatorOrderingPolicy { - +public class FifoOrderingPolicy extends + AbstractComparatorOrderingPolicy { + + private CompoundComparator fifoComparator; + public FifoOrderingPolicy() { - this.comparator = new FifoComparator(); + List> comparators = + new ArrayList>(); + comparators.add(new PriorityComparator()); + comparators.add(new FifoComparator()); + fifoComparator = new CompoundComparator(comparators); + this.comparator = fifoComparator; this.schedulableEntities = new TreeSet(comparator); } - + @Override public void configure(Map conf) { - + } - + @Override - public void containerAllocated(S schedulableEntity, - RMContainer r) { - } + public void containerAllocated(S schedulableEntity, RMContainer r) { + } @Override - public void containerReleased(S schedulableEntity, - RMContainer r) { - } + public void containerReleased(S schedulableEntity, RMContainer r) { + } @Override public void demandUpdated(S schedulableEntity) { @@ -55,5 +65,5 @@ public void demandUpdated(S schedulableEntity) { public String getInfo() { return "FifoOrderingPolicy"; } - + } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/PriorityComparator.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/PriorityComparator.java new file mode 100644 index 0000000..fe93fa9 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/PriorityComparator.java @@ -0,0 +1,37 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.server.resourcemanager.scheduler.policy; + +import java.util.Comparator; + +/** + * A Comparator which orders SchedulableEntities by priority. + */ +public class PriorityComparator implements Comparator { + + @Override + public int compare(SchedulableEntity r1, SchedulableEntity r2) { + int res = 0; + if (r1.getPriority() != null && + !r1.getPriority().equals(r2.getPriority())) { + res = r1.getPriority().compareTo(r2.getPriority()); + } + return res; + } +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/TestFifoOrderingPolicy.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/TestFifoOrderingPolicy.java index e05ef26..7b4ea7a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/TestFifoOrderingPolicy.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/policy/TestFifoOrderingPolicy.java @@ -20,16 +20,10 @@ import java.util.*; +import org.apache.hadoop.yarn.api.records.Priority; import org.junit.Assert; import org.junit.Test; -import org.apache.hadoop.yarn.api.records.Priority; -import org.apache.hadoop.yarn.api.records.Resource; -import org.apache.hadoop.yarn.util.resource.Resources; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration; - -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.fica.FiCaSchedulerApp; - public class TestFifoOrderingPolicy { @Test @@ -46,6 +40,21 @@ public void testFifoOrderingPolicy() { r2.setSerial(2); Assert.assertEquals(policy.getComparator().compare(r1, r2), -1); + + // r1 and r2 are equal, so application id considered + r1.setApplicationPriority(Priority.newInstance(0)); + r2.setApplicationPriority(Priority.newInstance(0)); + Assert.assertEquals(policy.getComparator().compare(r1, r2), -1); + + // r1 has lower priority + r1.setApplicationPriority(Priority.newInstance(1)); + r2.setApplicationPriority(Priority.newInstance(2)); + Assert.assertEquals(policy.getComparator().compare(r1, r2), 1); + + // r1 has higher priority + r1.setApplicationPriority(Priority.newInstance(2)); + r2.setApplicationPriority(Priority.newInstance(1)); + Assert.assertEquals(policy.getComparator().compare(r1, r2), -1); } @Test -- 1.9.2.msysgit.0