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;
|
package org.apache.hadoop.yarn.client.cli;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -197,6 +198,15 @@ private int runCommand(String[] args) throws Exception {
|
|||||||
return -1;
|
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();
|
LogCLIHelpers logCliHelper = new LogCLIHelpers();
|
||||||
logCliHelper.setConf(getConf());
|
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)
|
@Test (timeout = 15000)
|
||||||
public void testSaveContainerLogsLocally() throws Exception {
|
public void testSaveContainerLogsLocally() throws Exception {
|
||||||
String remoteLogRootDir = "target/logs/";
|
String remoteLogRootDir = "target/logs/";
|
||||||
@ -845,13 +903,6 @@ public void testPrintContainerLogMetadata() throws Exception {
|
|||||||
LogsCLI cli = new LogsCLIForTest(mockYarnClient);
|
LogsCLI cli = new LogsCLIForTest(mockYarnClient);
|
||||||
cli.setConf(configuration);
|
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(),
|
cli.run(new String[] {"-applicationId", appId.toString(),
|
||||||
"-show_container_log_info"});
|
"-show_container_log_info"});
|
||||||
assertTrue(sysOutStream.toString().contains(
|
assertTrue(sysOutStream.toString().contains(
|
||||||
|
Loading…
Reference in New Issue
Block a user