diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueuePlacementRule.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueuePlacementRule.java index 80de315..35590ec 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueuePlacementRule.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/QueuePlacementRule.java @@ -345,16 +345,17 @@ public boolean isTerminal() { } /** - * Replace the periods in the username or groupname with "_dot_". + * Replace the periods in the username or groupname with "_dot_" and + * remove trailing and leading whitespace. */ protected String cleanName(String name) { if (name.contains(".")) { - String converted = name.replaceAll("\\.", "_dot_"); + String converted = name.trim().replaceAll("\\.", "_dot_"); LOG.warn("Name " + name + " is converted to " + converted + " when it is used as a queue name."); return converted; } else { - return name; + return name.trim(); } } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java index 98877e7..e02cd37 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java @@ -4548,4 +4548,39 @@ public void testEmptyQueueNameInConfigFile() throws IOException { "Failed to initialize FairScheduler")); } } + + @Test + public void testUserAsDefaultQueueWithLeadingTrailingSpaceUserName() + throws Exception { + conf.set(FairSchedulerConfiguration.USER_AS_DEFAULT_QUEUE, "true"); + scheduler.init(conf); + scheduler.start(); + scheduler.reinitialize(conf, resourceManager.getRMContext()); + ApplicationAttemptId appAttemptId = createAppAttemptId(1, 1); + createApplicationWithAMResource(appAttemptId, "default", " user1", null); + assertEquals(1, scheduler.getQueueManager().getLeafQueue("user1", true) + .getNumRunnableApps()); + assertEquals(0, scheduler.getQueueManager().getLeafQueue("default", true) + .getNumRunnableApps()); + assertEquals("root.user1", resourceManager.getRMContext().getRMApps() + .get(appAttemptId.getApplicationId()).getQueue()); + + ApplicationAttemptId attId2 = createAppAttemptId(2, 1); + createApplicationWithAMResource(attId2, "default", "user1 ", null); + assertEquals(2, scheduler.getQueueManager().getLeafQueue("user1", true) + .getNumRunnableApps()); + assertEquals(0, scheduler.getQueueManager().getLeafQueue("default", true) + .getNumRunnableApps()); + assertEquals("root.user1", resourceManager.getRMContext().getRMApps() + .get(attId2.getApplicationId()).getQueue()); + + ApplicationAttemptId attId3 = createAppAttemptId(3, 1); + createApplicationWithAMResource(attId3, "default", "user1", null); + assertEquals(3, scheduler.getQueueManager().getLeafQueue("user1", true) + .getNumRunnableApps()); + assertEquals(0, scheduler.getQueueManager().getLeafQueue("default", true) + .getNumRunnableApps()); + assertEquals("root.user1", resourceManager.getRMContext().getRMApps() + .get(attId3.getApplicationId()).getQueue()); + } }