Skip to content

Commit fed6fec

Browse files
committed
YARN-10312. Add support for yarn logs -logFile to retain backward compatibility.
Contributed by Jim Brennan.
1 parent 93b121a commit fed6fec

File tree

2 files changed

+55
-0
lines changed
  • hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src

2 files changed

+55
-0
lines changed

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ public class LogsCLI extends Configured implements Tool {
100100
private static final String APP_OWNER_OPTION = "appOwner";
101101
private static final String AM_CONTAINER_OPTION = "am";
102102
private static final String PER_CONTAINER_LOG_FILES_OPTION = "log_files";
103+
private static final String PER_CONTAINER_LOG_FILES_OLD_OPTION = "logFiles";
103104
private static final String PER_CONTAINER_LOG_FILES_REGEX_OPTION
104105
= "log_files_pattern";
105106
private static final String LIST_NODES_OPTION = "list_nodes";
@@ -202,6 +203,12 @@ private int runCommand(String[] args) throws Exception {
202203
}
203204
if (commandLine.hasOption(PER_CONTAINER_LOG_FILES_OPTION)) {
204205
logFiles = commandLine.getOptionValues(PER_CONTAINER_LOG_FILES_OPTION);
206+
} else {
207+
// For backward compatibility, we need to check for the old form of this
208+
// command line option as well. New form takes precedent.
209+
if (commandLine.hasOption(PER_CONTAINER_LOG_FILES_OLD_OPTION)) {
210+
logFiles = commandLine.getOptionValues(PER_CONTAINER_LOG_FILES_OLD_OPTION);
211+
}
205212
}
206213
if (commandLine.hasOption(PER_CONTAINER_LOG_FILES_REGEX_OPTION)) {
207214
logFilesRegex = commandLine.getOptionValues(
@@ -937,6 +944,12 @@ private Options createCommandOpts() {
937944
logFileOpt.setArgs(Option.UNLIMITED_VALUES);
938945
logFileOpt.setArgName("Log File Name");
939946
opts.addOption(logFileOpt);
947+
Option oldLogFileOpt = new Option(PER_CONTAINER_LOG_FILES_OLD_OPTION, true,
948+
"Deprecated name for log_files, please use log_files option instead");
949+
oldLogFileOpt.setValueSeparator(',');
950+
oldLogFileOpt.setArgs(Option.UNLIMITED_VALUES);
951+
oldLogFileOpt.setArgName("Log File Name");
952+
opts.addOption(oldLogFileOpt);
940953
Option logFileRegexOpt = new Option(PER_CONTAINER_LOG_FILES_REGEX_OPTION,
941954
true, "Specify comma-separated value "
942955
+ "to get matched log files by using java regex. Use \".*\" to "

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestLogsCLI.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,48 @@ public ContainerReport getContainerReport(String containerIdStr)
529529
createEmptyLog("empty")));
530530
sysOutStream.reset();
531531

532+
// Check backward compatibility for -logFiles
533+
exitCode = cli.run(new String[] {"-applicationId", appId.toString(),
534+
"-logFiles", "stdout"});
535+
assertTrue("Failed with -logFiles", exitCode == 0);
536+
assertFalse("Failed with -logFiles", sysOutStream.toString().contains(
537+
logMessage(containerId1, "syslog")));
538+
assertFalse("Failed with -logFiles", sysOutStream.toString().contains(
539+
logMessage(containerId2, "syslog")));
540+
assertFalse("Failed with -logFiles", sysOutStream.toString().contains(
541+
logMessage(containerId3, "syslog")));
542+
assertTrue("Failed with -logFiles", sysOutStream.toString().contains(
543+
logMessage(containerId3, "stdout")));
544+
assertFalse("Failed with -logFiles", sysOutStream.toString().contains(
545+
logMessage(containerId3, "stdout1234")));
546+
assertFalse("Failed with -logFiles", sysOutStream.toString().contains(
547+
createEmptyLog("empty")));
548+
sysOutStream.reset();
549+
550+
// Check -log_files supercedes -logFiles
551+
exitCode = cli.run(new String[] {"-applicationId", appId.toString(),
552+
"-log_files", "stdout", "-logFiles", "syslog"});
553+
assertTrue("Failed with -logFiles and -log_files", exitCode == 0);
554+
assertFalse("Failed with -logFiles and -log_files",
555+
sysOutStream.toString().contains(
556+
logMessage(containerId1, "syslog")));
557+
assertFalse("Failed with -logFiles and -log_files",
558+
sysOutStream.toString().contains(
559+
logMessage(containerId2, "syslog")));
560+
assertFalse("Failed with -logFiles and -log_files",
561+
sysOutStream.toString().contains(
562+
logMessage(containerId3, "syslog")));
563+
assertTrue("Failed with -logFiles and -log_files",
564+
sysOutStream.toString().contains(
565+
logMessage(containerId3, "stdout")));
566+
assertFalse("Failed with -logFiles and -log_files",
567+
sysOutStream.toString().contains(
568+
logMessage(containerId3, "stdout1234")));
569+
assertFalse("Failed with -logFiles and -log_files",
570+
sysOutStream.toString().contains(
571+
createEmptyLog("empty")));
572+
sysOutStream.reset();
573+
532574
exitCode = cli.run(new String[] {"-applicationId", appId.toString(),
533575
"-log_files_pattern", "std*"});
534576
assertTrue(exitCode == 0);

0 commit comments

Comments
 (0)