diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/UserGroupMappingPlacementRule.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/UserGroupMappingPlacementRule.java index 9eeb2ac3ca7..96f49394a83 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/UserGroupMappingPlacementRule.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/placement/UserGroupMappingPlacementRule.java @@ -179,11 +179,15 @@ private ApplicationPlacementContext getPlacementForUser(String user) if (mapping.getParentQueue() != null && mapping.getParentQueue().equals(PRIMARY_GROUP_MAPPING) && mapping.getQueue().equals(CURRENT_USER_MAPPING)) { - QueueMapping queueMapping = - new QueueMapping(mapping.getType(), mapping.getSource(), - user, groups.getGroups(user).get(0)); - validateQueueMapping(queueMapping); - return getPlacementContext(queueMapping, user); + if (this.queueManager + .getQueue(groups.getGroups(user).get(0)) != null) { + QueueMapping queueMapping = new QueueMapping(mapping.getType(), + mapping.getSource(), user, groups.getGroups(user).get(0)); + validateQueueMapping(queueMapping); + return getPlacementContext(queueMapping, user); + } else { + return null; + } } else if (mapping.getParentQueue() != null && mapping.getParentQueue().equals(SECONDARY_GROUP_MAPPING) && mapping.getQueue().equals(CURRENT_USER_MAPPING)) { @@ -203,7 +207,13 @@ private ApplicationPlacementContext getPlacementForUser(String user) } else if (mapping.queue.equals(CURRENT_USER_MAPPING)) { return getPlacementContext(mapping, user); } else if (mapping.queue.equals(PRIMARY_GROUP_MAPPING)) { - return getPlacementContext(mapping, groups.getGroups(user).get(0)); + if (this.queueManager + .getQueue(groups.getGroups(user).get(0)) != null) { + return getPlacementContext(mapping, + groups.getGroups(user).get(0)); + } else { + return null; + } } else if (mapping.queue.equals(SECONDARY_GROUP_MAPPING)) { String secondaryGroup = getSecondaryGroup(user); if (secondaryGroup != null) { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/placement/TestUserGroupMappingPlacementRule.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/placement/TestUserGroupMappingPlacementRule.java index 75907568f7a..53e61d5da6a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/placement/TestUserGroupMappingPlacementRule.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/placement/TestUserGroupMappingPlacementRule.java @@ -90,6 +90,7 @@ private void verifyQueueMapping(QueueMapping queueMapping, String inputUser, when(queueManager.getQueue("agroup")).thenReturn(agroup); when(queueManager.getQueue("bsubgroup2")).thenReturn(bsubgroup2); when(queueManager.getQueue("asubgroup2")).thenReturn(asubgroup2); + rule.setQueueManager(queueManager); ApplicationSubmissionContext asc = Records.newRecord( ApplicationSubmissionContext.class); @@ -131,6 +132,10 @@ public void testMapping() throws YarnException { verifyQueueMapping( new QueueMapping(MappingType.USER, "%user", "%primary_group"), "a", "agroup"); + // Queue "bgroup" is not configured, hence "default" should be used + verifyQueueMapping( + new QueueMapping(MappingType.USER, "%user", "%primary_group"), "b", + "default"); verifyQueueMapping( new QueueMapping(MappingType.USER, "%user", "%user", "%primary_group"), "a", YarnConfiguration.DEFAULT_QUEUE_NAME, "a", false, "agroup"); 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/TestCapacitySchedulerAutoCreatedQueueBase.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/TestCapacitySchedulerAutoCreatedQueueBase.java index 728c7fe7c0e..39c211fc361 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/TestCapacitySchedulerAutoCreatedQueueBase.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/TestCapacitySchedulerAutoCreatedQueueBase.java @@ -337,8 +337,8 @@ public static CapacitySchedulerConfiguration setupQueueConfiguration( // Define top-level queues // Set childQueue for root conf.setQueues(ROOT, - new String[] {"a", "b", "c", "d", "esubgroup1", "asubgroup2", - "fgroup"}); + new String[] {"a", "b", "c", "d", "esubgroup1", "esubgroup2", "fgroup", + "a1group", "ggroup", "g"}); conf.setCapacity(A, A_CAPACITY); conf.setCapacity(B, B_CAPACITY); 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/TestCapacitySchedulerQueueMappingFactory.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/TestCapacitySchedulerQueueMappingFactory.java index 6ee9a7baf38..80fd1a8ae01 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/TestCapacitySchedulerQueueMappingFactory.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/TestCapacitySchedulerQueueMappingFactory.java @@ -230,8 +230,8 @@ public void testNestedUserQueueWithPrimaryGroupAsDynamicParentQueue() testNestedUserQueueWithDynamicParentQueue(queueMappingsForUG, true, "f"); try { - testNestedUserQueueWithDynamicParentQueue(queueMappingsForUG, true, "h"); - fail("Leaf Queue 'h' doesn't exists"); + testNestedUserQueueWithDynamicParentQueue(queueMappingsForUG, true, "g"); + fail("Queue 'g' exists, but type is not Leaf Queue"); } catch (YarnException e) { // Exception is expected as there is no such leaf queue }