Repository: hadoop Updated Branches: refs/heads/branch-2 ee1e45e4b -> cbd2970be
YARN-5339. Fixed "yarn logs" to fail when a file is passed to -out option instead of a directory. Contributed by Xuan Gong. (cherry picked from commit d18050522c5c6bd9e32eb9a1be4ffe2288624c40) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/cbd2970b Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/cbd2970b Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/cbd2970b Branch: refs/heads/branch-2 Commit: cbd2970be769a23fffff7a0ebf6011b45f546ee9 Parents: ee1e45e Author: Vinod Kumar Vavilapalli <vino...@apache.org> Authored: Wed Jul 13 14:52:30 2016 -0700 Committer: Vinod Kumar Vavilapalli <vino...@apache.org> Committed: Wed Jul 13 14:55:44 2016 -0700 ---------------------------------------------------------------------- .../apache/hadoop/yarn/client/cli/LogsCLI.java | 10 +++ .../hadoop/yarn/client/cli/TestLogsCLI.java | 65 +++++++++++++++++--- 2 files changed, 68 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/cbd2970b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java index ce26bd0..c1ac792 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java @@ -18,6 +18,7 @@ package org.apache.hadoop.yarn.client.cli; +import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.util.ArrayList; @@ -197,6 +198,15 @@ public class LogsCLI extends Configured implements Tool { return -1; } + if (localDir != null) { + File file = new File(localDir); + if (file.exists() && file.isFile()) { + System.err.println("Invalid value for -out option. " + + "Please provide a directory."); + return -1; + } + } + LogCLIHelpers logCliHelper = new LogCLIHelpers(); logCliHelper.setConf(getConf()); http://git-wip-us.apache.org/repos/asf/hadoop/blob/cbd2970b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestLogsCLI.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestLogsCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestLogsCLI.java index cb9a663..3fe53d9 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestLogsCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestLogsCLI.java @@ -711,6 +711,64 @@ public class TestLogsCLI { } } + @Test (timeout = 5000) + public void testLogsCLIWithInvalidArgs() throws Exception { + String localDir = "target/SaveLogs"; + Path localPath = new Path(localDir); + Configuration configuration = new Configuration(); + FileSystem fs = FileSystem.get(configuration); + ApplicationId appId = ApplicationId.newInstance(0, 1); + YarnClient mockYarnClient = + createMockYarnClient(YarnApplicationState.FINISHED, + UserGroupInformation.getCurrentUser().getShortUserName()); + LogsCLI cli = new LogsCLIForTest(mockYarnClient); + cli.setConf(configuration); + + // Specify an invalid applicationId + int exitCode = cli.run(new String[] {"-applicationId", + "123"}); + assertTrue(exitCode == -1); + assertTrue(sysErrStream.toString().contains( + "Invalid ApplicationId specified")); + sysErrStream.reset(); + + // Specify an invalid containerId + exitCode = cli.run(new String[] {"-containerId", + "123"}); + assertTrue(exitCode == -1); + assertTrue(sysErrStream.toString().contains( + "Invalid ContainerId specified")); + sysErrStream.reset(); + + // Specify show_container_log_info and show_application_log_info + // at the same time + exitCode = cli.run(new String[] {"-applicationId", appId.toString(), + "-show_container_log_info", "-show_application_log_info"}); + assertTrue(exitCode == -1); + assertTrue(sysErrStream.toString().contains("Invalid options. " + + "Can only accept one of show_application_log_info/" + + "show_container_log_info.")); + sysErrStream.reset(); + + // Specify a file name to the option -out + try { + fs.mkdirs(localPath); + Path tmpFilePath = new Path(localPath, "tmpFile"); + if (!fs.exists(tmpFilePath)) { + fs.createNewFile(tmpFilePath); + } + exitCode = cli.run(new String[] {"-applicationId", + appId.toString(), + "-out" , tmpFilePath.toString()}); + assertTrue(exitCode == -1); + assertTrue(sysErrStream.toString().contains( + "Invalid value for -out option. Please provide a directory.")); + } finally { + fs.delete(localPath, true); + } + } + + @Test (timeout = 15000) public void testSaveContainerLogsLocally() throws Exception { String remoteLogRootDir = "target/logs/"; @@ -845,13 +903,6 @@ public class TestLogsCLI { LogsCLI cli = new LogsCLIForTest(mockYarnClient); cli.setConf(configuration); - int result = cli.run(new String[] {"-applicationId", appId.toString(), - "-show_container_log_info", "-show_application_log_info"}); - assertTrue(result == -1); - assertTrue(sysErrStream.toString().contains("Invalid options. " - + "Can only accept one of show_application_log_info/" - + "show_container_log_info.")); - cli.run(new String[] {"-applicationId", appId.toString(), "-show_container_log_info"}); assertTrue(sysOutStream.toString().contains( --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org