YARN-5339. Fixed "yarn logs" to fail when a file is passed to -out option instead of a directory. Contributed by Xuan Gong.
This commit is contained in:
parent
af8f480c24
commit
d18050522c
@ -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 @@ private int runCommand(String[] args) throws Exception {
|
||||
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());
|
||||
|
||||
|
@ -711,6 +711,64 @@ public void testFetchApplictionLogsAsAnotherUser() throws Exception {
|
||||
}
|
||||
}
|
||||
|
||||
@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 void testPrintContainerLogMetadata() throws Exception {
|
||||
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(
|
||||
|
Loading…
Reference in New Issue
Block a user