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 920052f17839c486b2b0cc3df29fbd29c0c66b56..a80fa10a499d0c1fd2888bc764e412c3bcfb3a77 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
@@ -748,6 +748,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..1d3e0a4cf6895ee1d446739debd0e69a23f0c8cb 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,33 @@ 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