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/FairScheduler.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java index 8daf0f333c22f3ddb58255d3eb6419c19ab5280e..d33c214ca4305494b8eb961e0a1db8e85f487cb7 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java @@ -774,6 +774,12 @@ FSLeafQueue assignToQueue(RMApp rmApp, String queueName, String user) { appRejectMsg = queueName + " is not a leaf queue"; } } + } catch (IllegalStateException se) { + appRejectMsg = "Unable to match app " + rmApp.getApplicationId() + + " to a queue placement policy, and no valid terminal queue " + + " placement rule is configured. Please contact an administrator " + + " to confirm that the fair scheduler configuration contains a " + + " valid terminal queue placement rule."; } catch (InvalidQueueNameException qne) { appRejectMsg = qne.getMessage(); } catch (IOException ioe) { 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 98af8b9662b723170a7379b8526275f0c72dfa1a..7535f69e4f3bdfc3b09d48efa0bf416559029ad2 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 @@ -1605,6 +1605,34 @@ public void testAssignToQueue() throws Exception { } @Test + public void testAssignToBadDefaultQueue() throws Exception { + conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE); + + PrintWriter out = new PrintWriter(new FileWriter(ALLOC_FILE)); + out.println(""); + out.println(""); + out.println(""); + out.println(""); + out.println(""); + out.println(""); + out.println(""); + out.close(); + scheduler.init(conf); + scheduler.start(); + scheduler.reinitialize(conf, resourceManager.getRMContext()); + + RMApp rmApp1 = new MockRMApp(0, 0, RMAppState.NEW); + + try { + FSLeafQueue queue1 = scheduler.assignToQueue(rmApp1, "default", + "asterix"); + } catch (IllegalStateException ise) { + fail("Bad queue placement policy terminal rule should not throw " + + "exception "); + } + } + + @Test public void testAssignToNonLeafQueueReturnsNull() throws Exception { conf.set(FairSchedulerConfiguration.USER_AS_DEFAULT_QUEUE, "true"); scheduler.init(conf); 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/TestQueuePlacementPolicy.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestQueuePlacementPolicy.java index 0dbc99be7bed37e9cb7754e14964871d233189e5..3fe9ce310216ec0c9a8b8cb9910a70cd4f1da664 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestQueuePlacementPolicy.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestQueuePlacementPolicy.java @@ -131,9 +131,14 @@ public void testTerminals() throws Exception { StringBuffer sb = new StringBuffer(); sb.append(""); sb.append(" "); - sb.append(" "); + sb.append(" "); sb.append(""); - parse(sb.toString()); + QueuePlacementPolicy policy = parse(sb.toString()); + try { + policy.assignAppToQueue("root.otherdefault", "user1"); + fail("Expect exception from having default rule with create=\'false\'"); + } catch (IllegalStateException se) { + } } @Test