diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 8ba1523295b..aff92515eae 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -394,6 +394,9 @@ Release 2.4.0 - UNRELEASED YARN-1766. Fixed a bug in ResourceManager to use configuration loaded from the configuration-provider when booting up. (Xuan Gong via vinodkv) + + YARN-1768. Fixed error message being too verbose when killing a non-existent + application Release 2.3.1 - UNRELEASED diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java index 4332f5beeaf..79250680bba 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java @@ -40,6 +40,7 @@ import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ApplicationReport; import org.apache.hadoop.yarn.api.records.ContainerReport; import org.apache.hadoop.yarn.api.records.YarnApplicationState; +import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException; import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.util.ConverterUtils; @@ -208,7 +209,11 @@ public class ApplicationCLI extends YarnCLI { printUsage(opts); return exitCode; } - killApplication(cliParser.getOptionValue(KILL_CMD)); + try{ + killApplication(cliParser.getOptionValue(KILL_CMD)); + } catch (ApplicationNotFoundException e) { + return exitCode; + } } else if (cliParser.hasOption(MOVE_TO_QUEUE_CMD)) { if (!cliParser.hasOption(QUEUE_CMD)) { printUsage(opts); @@ -370,7 +375,15 @@ public class ApplicationCLI extends YarnCLI { private void killApplication(String applicationId) throws YarnException, IOException { ApplicationId appId = ConverterUtils.toApplicationId(applicationId); - ApplicationReport appReport = client.getApplicationReport(appId); + ApplicationReport appReport = null; + try { + appReport = client.getApplicationReport(appId); + } catch (ApplicationNotFoundException e) { + sysout.println("Application with id '" + applicationId + + "' doesn't exist in RM."); + throw e; + } + if (appReport.getYarnApplicationState() == YarnApplicationState.FINISHED || appReport.getYarnApplicationState() == YarnApplicationState.KILLED || appReport.getYarnApplicationState() == YarnApplicationState.FAILED) { @@ -380,7 +393,7 @@ public class ApplicationCLI extends YarnCLI { client.killApplication(appId); } } - + /** * Moves the application with the given ID to the given queue. */ @@ -470,12 +483,12 @@ public class ApplicationCLI extends YarnCLI { * @throws YarnException * @throws IOException */ - private void listApplicationAttempts(String appId) throws YarnException, + private void listApplicationAttempts(String applicationId) throws YarnException, IOException { PrintWriter writer = new PrintWriter(sysout); List appAttemptsReport = client - .getApplicationAttempts(ConverterUtils.toApplicationId(appId)); + .getApplicationAttempts(ConverterUtils.toApplicationId(applicationId)); writer.println("Total number of application attempts " + ":" + appAttemptsReport.size()); writer.printf(APPLICATION_ATTEMPTS_PATTERN, "ApplicationAttempt-Id", diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java index 97721864968..384d77a48e2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java @@ -740,12 +740,16 @@ public class TestYarnCLI { .getApplicationReport(applicationId); cli = createAndGetAppCLI(); try { - cli.run(new String[] { "application","-kill", applicationId.toString() }); - Assert.fail(); - } catch (Exception ex) { - Assert.assertTrue(ex instanceof ApplicationNotFoundException); - Assert.assertEquals("Application with id '" + applicationId + - "' doesn't exist in RM.", ex.getMessage()); + int exitCode = + cli.run(new String[] { "application","-kill", applicationId.toString() }); + verify(sysOut).println("Application with id '" + applicationId + + "' doesn't exist in RM."); + Assert.assertNotSame("should return non-zero exit code.", 0, exitCode); + } catch (ApplicationNotFoundException appEx) { + Assert.fail("application -kill should not throw" + + "ApplicationNotFoundException. " + appEx); + } catch (Exception e) { + Assert.fail("Unexpected exception: " + e); } }