diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/monitor/capacity/TestProportionalCapacityPreemptionPolicyInterQueueWithDRF.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/monitor/capacity/TestProportionalCapacityPreemptionPolicyInterQueueWithDRF.java new file mode 100644 index 00000000000..c4bc084b9ad --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/monitor/capacity/TestProportionalCapacityPreemptionPolicyInterQueueWithDRF.java @@ -0,0 +1,52 @@ +package org.apache.hadoop.yarn.server.resourcemanager.monitor.capacity; + +import org.junit.Test; + +import static org.mockito.Matchers.argThat; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +public class TestProportionalCapacityPreemptionPolicyInterQueueWithDRF + extends + ProportionalCapacityPreemptionPolicyMockFramework { + + @Test + public void testInterQueuePreemptionWithMultipleResource() + throws Exception { + /** + * Queue structure is: + * + *
+     *           root
+     *           /  \
+     *          a    b
+     * 
+ * + */ + + String labelsConfig = "=100:200,true"; // default partition + String nodesConfig = "n1="; // only one node + String queuesConfig = + // guaranteed,max,used,pending + "root(=[100:200 100:200 100:200 100:200]);" + //root + "-a(=[50:100 100:200 40:80 30:70]);" + // a + "-b(=[50:100 100:200 60:120 40:50])"; // b + + String appsConfig = + //queueName\t(priority,resource,host,expression,#repeat,reserved) + "a\t(1,2:4,n1,,20,false);" + // app1 in a + "b\t(1,2:4,n1,,30,false)"; // app2 in b + + buildEnv(labelsConfig, nodesConfig, queuesConfig, appsConfig, true); + policy.editSchedule(); + + // Preemption should happen in Queue b, preempt <10,20> to Queue a + verify(mDisp, never()).handle(argThat( + new TestProportionalCapacityPreemptionPolicy.IsPreemptionRequestFor( + getAppAttemptId(1)))); + verify(mDisp, times(5)).handle(argThat( + new TestProportionalCapacityPreemptionPolicy.IsPreemptionRequestFor( + getAppAttemptId(2)))); + } +}