diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java index 4a2dac0..b92a04f 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java +++ 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; @@ -172,6 +173,16 @@ public int run(String[] args) throws Exception { } } + 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."); + printHelpMessage(printOpts); + return -1; + } + } + LogCLIHelpers logCliHelper = new LogCLIHelpers(); logCliHelper.setConf(getConf()); @@ -272,7 +283,7 @@ public static void main(String[] args) throws Exception { } private void printHelpMessage(Options options) { - System.out.println("Retrieve logs for completed YARN applications."); + System.out.println("Retrieve logs for YARN applications."); HelpFormatter formatter = new HelpFormatter(); formatter.printHelp("yarn logs -applicationId [OPTIONS]", new Options()); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestLogsCLI.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestLogsCLI.java index 34369ef..029ab72 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestLogsCLI.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestLogsCLI.java @@ -182,7 +182,7 @@ public void testHelpMessage() throws Exception { assertTrue(exitCode == -1); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintWriter pw = new PrintWriter(baos); - pw.println("Retrieve logs for completed YARN applications."); + pw.println("Retrieve logs for YARN applications."); pw.println("usage: yarn logs -applicationId [OPTIONS]"); pw.println(); pw.println("general options are:"); @@ -778,6 +778,22 @@ public void testSaveContainerLogsLocally() throws Exception { String container2= readContainerContent(container2Dir[0].getPath(), fs); assertTrue(container2.contains("Hello " + containerId2 + " in syslog!")); + sysOutStream.reset(); + + //create a tmp file + Path tmpFilePath = new Path(localPath, "tmpFile"); + File tmpFile = new File(tmpFilePath.toString()); + if (!tmpFile.exists()) { + tmpFile.createNewFile(); + } + + exitCode = cli.run(new String[] {"-applicationId", + appId.toString(), + "-out" , tmpFile.getAbsolutePath()}); + assertTrue(exitCode == -1); + assertTrue(sysErrStream.toString().contains( + "Invalid value for -out option. Please provide a directory.")); + } finally { fs.delete(new Path(remoteLogRootDir), true); fs.delete(new Path(rootLogDir), true);