From 240b4e9a7f16ccd309967771108a671d16dbc1aa Mon Sep 17 00:00:00 2001 From: Ravi Prakash Date: Wed, 5 Mar 2014 09:29:16 +0000 Subject: [PATCH] YARN-1768. Fixed error message being too verbose when killing a non-existent application. Contributed by Tsuyoshi Ozawa git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1574401 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-yarn-project/CHANGES.txt | 3 +++ .../yarn/client/cli/ApplicationCLI.java | 23 +++++++++++++++---- .../hadoop/yarn/client/cli/TestYarnCLI.java | 16 ++++++++----- 3 files changed, 31 insertions(+), 11 deletions(-) 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.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 int run(String[] args) throws Exception { 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 @@ private void listApplications(Set appTypes, 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 @@ private void killApplication(String applicationId) throws YarnException, client.killApplication(appId); } } - + /** * Moves the application with the given ID to the given queue. */ @@ -470,12 +483,12 @@ private String getAllValidApplicationStates() { * @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 void testKillApplication() throws Exception { .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); } }