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/CapacitySchedulerAutoQueueHandler.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/CapacitySchedulerAutoQueueHandler.java index 55ab1ff269d..e847737388c 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/CapacitySchedulerAutoQueueHandler.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/CapacitySchedulerAutoQueueHandler.java @@ -55,13 +55,15 @@ public LeafQueue autoCreateQueue(ApplicationPlacementContext queue) List parentsToCreate = new ArrayList<>(); ApplicationPlacementContext queueCandidateContext = parentContext; - CSQueue existingQueueCandidate = getQueue(queueCandidateContext.getQueue()); + CSQueue existingQueueCandidate = getQueue( + queueCandidateContext.getFullQueuePath()); while (existingQueueCandidate == null) { parentsToCreate.add(queueCandidateContext); queueCandidateContext = CSQueueUtils.extractQueuePath( queueCandidateContext.getParentQueue()); - existingQueueCandidate = getQueue(queueCandidateContext.getQueue()); + existingQueueCandidate = getQueue( + queueCandidateContext.getFullQueuePath()); } // Reverse the collection to to represent the hierarchy to be created 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 48dba821434..d91cdff2c97 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,26 @@ public void testAutoCreateQueueUserLimitDisabled() throws Exception { user0LeafQueue.getMinimumAllocation()).getMemorySize(), 1e-6); } + @Test + public void testAutoCreateQueueIfAmbiguousQueueNames() throws Exception { + startScheduler(); + + AbstractCSQueue b = (AbstractCSQueue) cs.getQueue("root.b"); + Assert.assertFalse(b.isDynamicQueue()); + + createQueue("root.a.b.b"); + + AbstractCSQueue bAutoParent = (AbstractCSQueue) cs.getQueue("root.a.b"); + Assert.assertTrue(bAutoParent.isDynamicQueue()); + Assert.assertTrue(bAutoParent.hasChildQueues()); + + AbstractCSQueue bAutoLeafQueue = + (AbstractCSQueue) cs.getQueue("root.a.b.b"); + Assert.assertTrue(bAutoLeafQueue.isDynamicQueue()); + Assert.assertFalse(bAutoLeafQueue.hasChildQueues()); + + } + private LeafQueue createQueue(String queuePath) throws YarnException { return autoQueueHandler.autoCreateQueue( CSQueueUtils.extractQueuePath(queuePath));