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/capacity/LeafQueue.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java index 6bf8d0a471a..5ab89854124 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java @@ -1907,7 +1907,9 @@ private void updateAbsoluteCapacitiesAndRelatedFields() { // If maxApplications not set, use the system total max app, apply newly // calculated abs capacity of the queue. - if (maxApplications <= 0) { + // When add new queue, the parent queue's other children should also + // update the max app. + if (schedulerConf.getMaximumApplicationsPerQueue(getQueuePath()) <= 0) { int maxSystemApps = schedulerConf. getMaximumSystemApplications(); maxApplications = 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/capacity/TestCapacitySchedulerNewQueueAutoCreation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerNewQueueAutoCreation.java index 4facf943b6e..97b74c6f9dc 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerNewQueueAutoCreation.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerNewQueueAutoCreation.java @@ -525,6 +525,44 @@ public void testAutoCreateQueueUserLimitDisabled() throws Exception { user0LeafQueue.getMinimumAllocation()).getMemorySize(), 1e-6); } + @Test + public void testLeafQueueMaxAppWhenAutoCreation() throws Exception { + startScheduler(); + LeafQueue a1 = (LeafQueue)cs. + getQueue("root.a.a1"); + Assert.assertNotNull(a1); + Assert.assertEquals(a1.getMaxApplications(), + 10000 * a1.getAbsoluteCapacity(), 1); + + LeafQueue b = (LeafQueue)cs. + getQueue("root.b"); + Assert.assertNotNull(b); + Assert.assertEquals(b.getMaxApplications(), + 10000 * b.getAbsoluteCapacity(), 1); + + createQueue("root.e"); + + // Make sure other children queues + // max app correct. + LeafQueue e = (LeafQueue)cs. + getQueue("root.e"); + Assert.assertNotNull(e); + Assert.assertEquals(e.getMaxApplications(), + 10000 * e.getAbsoluteCapacity(), 1); + + a1 = (LeafQueue)cs. + getQueue("root.a.a1"); + Assert.assertNotNull(a1); + Assert.assertEquals(a1.getMaxApplications(), + 10000 * a1.getAbsoluteCapacity(), 1); + + b = (LeafQueue)cs. + getQueue("root.b"); + Assert.assertNotNull(b); + Assert.assertEquals(b.getMaxApplications(), + 10000 * b.getAbsoluteCapacity(), 1); + } + @Test public void testAutoCreateQueueIfAmbiguousQueueNames() throws Exception { startScheduler();