diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java index e8f68fb..18cdfd3 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java @@ -247,6 +247,26 @@ protected void submitApplication( // checked here as they have to be validated whether they are part of new // submission or just being recovered. + // Check whether application name is empty + if (submissionContext.getApplicationName() == null || + submissionContext.getApplicationName().length() == 0) { + LOG.warn("RM app submission failed in validating " + + "application name for application " + applicationId); + throw new YarnException("Invalid application name, application " + + applicationId + " sets an empty application name, " + + "which is not allowed."); + } + + // Check whether queue name is empty + if (submissionContext.getQueue() == null || + submissionContext.getQueue().length() == 0) { + LOG.warn("RM app submission failed in validating " + + "queue name for application " + applicationId); + throw new YarnException("Invalid queue name, application " + + applicationId + " requests an empty queue name, " + + "which is not allowed."); + } + // Check whether AM resource requirements are within required limits if (!submissionContext.getUnmanagedAM()) { ResourceRequest amReq = BuilderUtils.newResourceRequest( diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java index 6698412..ae971be 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java @@ -211,6 +211,8 @@ public void setUp() { asContext.setApplicationId(appId); asContext.setAMContainerSpec(mockContainerLaunchContext(recordFactory)); asContext.setResource(mockResource()); + asContext.setApplicationName("testApp"); + asContext.setQueue("default"); setupDispatcher(rmContext, conf); } @@ -474,6 +476,36 @@ public void testRMAppSubmitInvalidResourceRequest() throws Exception { e.getMessage().contains("Invalid resource request")); } } + + @Test (timeout = 30000) + public void testRMAppSubmitEmptyAppName() throws Exception { + asContext.setApplicationName(""); + + // submit an app + try { + appMonitor.submitApplication(asContext, "test"); + } catch (YarnException e) { + // Exception is expected + Assert.assertTrue("The thrown exception is not" + + " for invalid application name", + e.getMessage().contains("Invalid application name")); + } + } + + @Test (timeout = 30000) + public void testRMAppSubmitEmptyQueueName() throws Exception { + asContext.setQueue(""); + + // submit an app + try { + appMonitor.submitApplication(asContext, "test"); + } catch (YarnException e) { + // Exception is expected + Assert.assertTrue("The thrown exception is not" + + " for invalid queue name", + e.getMessage().contains("Invalid queue name")); + } + } private static ResourceScheduler mockResourceScheduler() { ResourceScheduler scheduler = mock(ResourceScheduler.class);