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..cb04ecb 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,41 @@ 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 { + public FifoOrderingPolicy() { - this.comparator = new FifoComparator(); + List> comparators = + new ArrayList>(); + comparators.add(new PriorityComparator()); + comparators.add(new FifoComparator()); + this.comparator = new CompoundComparator(comparators); 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 +62,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..292d381 --- /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,43 @@ +/** + * 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; + +import org.apache.hadoop.yarn.api.records.Priority; + +/** + * A Comparator which orders SchedulableEntities by priority. + */ +public class PriorityComparator implements Comparator { + + @Override + public int compare(SchedulableEntity se1, SchedulableEntity se2) { + Priority p1 = se1.getPriority(); + Priority p2 = se2.getPriority(); + if (p1 == null && p2 == null) { + return 0; + } else if (p1 == null && !(p2 == null)) { + return -1; + } else if (!(p1 == null) && p2 == null) { + return 1; + } + return p1.compareTo(p2); + } +} 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..9a65811 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 @@ -18,66 +18,88 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler.policy; -import java.util.*; +import java.util.Iterator; +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 public void testFifoOrderingPolicy() { - FifoOrderingPolicy policy = - new FifoOrderingPolicy(); + FifoOrderingPolicy policy = + new FifoOrderingPolicy(); MockSchedulableEntity r1 = new MockSchedulableEntity(); MockSchedulableEntity r2 = new MockSchedulableEntity(); - + Assert.assertEquals(policy.getComparator().compare(r1, r2), 0); - + r1.setSerial(1); Assert.assertEquals(policy.getComparator().compare(r1, r2), 1); - + r2.setSerial(2); Assert.assertEquals(policy.getComparator().compare(r1, r2), -1); } - + + @Test + public void testFifoOrderingPolicyAlongWithPriorty() { + FifoOrderingPolicy policy = + new FifoOrderingPolicy(); + MockSchedulableEntity r1 = new MockSchedulableEntity(); + MockSchedulableEntity r2 = new MockSchedulableEntity(); + + Priority p1 = Priority.newInstance(1); + Priority p2 = Priority.newInstance(0); + + // Both r1 and r1 priority is null + Assert.assertEquals(0, policy.getComparator().compare(r1, r2)); + + // r1 is null and r2 is not null + r2.setApplicationPriority(p2); + Assert.assertEquals(-1, policy.getComparator().compare(r1, r2)); + + // r1 is not null and r2 is null + r2.setApplicationPriority(null); + r1.setApplicationPriority(p1); + Assert.assertEquals(1, policy.getComparator().compare(r1, r2)); + + // r1 is not null and r2 is not null + r1.setApplicationPriority(p1); + r2.setApplicationPriority(p2); + Assert.assertEquals(-1, policy.getComparator().compare(r1, r2)); + } + @Test public void testIterators() { OrderingPolicy schedOrder = - new FifoOrderingPolicy(); - + new FifoOrderingPolicy(); + MockSchedulableEntity msp1 = new MockSchedulableEntity(); MockSchedulableEntity msp2 = new MockSchedulableEntity(); MockSchedulableEntity msp3 = new MockSchedulableEntity(); - + msp1.setSerial(3); msp2.setSerial(2); msp3.setSerial(1); - + schedOrder.addSchedulableEntity(msp1); schedOrder.addSchedulableEntity(msp2); schedOrder.addSchedulableEntity(msp3); - - //Assignment, oldest to youngest - checkSerials(schedOrder.getAssignmentIterator(), new long[]{1, 2, 3}); - - //Preemption, youngest to oldest - checkSerials(schedOrder.getPreemptionIterator(), new long[]{3, 2, 1}); + + // Assignment, oldest to youngest + checkSerials(schedOrder.getAssignmentIterator(), new long[] { 1, 2, 3 }); + + // Preemption, youngest to oldest + checkSerials(schedOrder.getPreemptionIterator(), new long[] { 3, 2, 1 }); } - + public void checkSerials(Iterator si, long[] serials) { - for (int i = 0;i < serials.length;i++) { + for (int i = 0; i < serials.length; i++) { Assert.assertEquals(si.next().getSerial(), serials[i]); } } - + } -- 1.9.2.msysgit.0