HDFS-17017. Fix the issue of arguments number limit in report command in DFSAdmin (#5667). Contributed by Haiyang Hu.

Reviewed-by: Viraj Jasani <vjasani@apache.org>
Signed-off-by: Ayush Saxena <ayushsaxena@apache.org>
This commit is contained in:
huhaiyang 2023-05-21 11:33:34 +08:00 committed by Ayush Saxena
parent adb673fdaf
commit 19a6762639
No known key found for this signature in database
GPG Key ID: D09AE71061AB564D
2 changed files with 20 additions and 9 deletions

View File

@ -485,6 +485,10 @@ protected DistributedFileSystem getDFS() throws IOException {
return AdminHelper.checkAndGetDFS(getFS(), getConf()); return AdminHelper.checkAndGetDFS(getFS(), getConf());
} }
public static final String[] DFS_REPORT_ARGS =
new String[] {"-live", "-dead", "-decommissioning", "-enteringmaintenance",
"-inmaintenance", "-slownodes"};
/** /**
* Gives a report on how the FileSystem is doing. * Gives a report on how the FileSystem is doing.
* @exception IOException if the filesystem does not exist. * @exception IOException if the filesystem does not exist.
@ -576,17 +580,16 @@ public void report(String[] argv, int i) throws IOException {
List<String> args = Arrays.asList(argv); List<String> args = Arrays.asList(argv);
// Truncate already handled arguments before parsing report()-specific ones // Truncate already handled arguments before parsing report()-specific ones
args = new ArrayList<String>(args.subList(i, args.size())); args = new ArrayList<String>(args.subList(i, args.size()));
final boolean listLive = StringUtils.popOption("-live", args); final boolean listLive = StringUtils.popOption(DFS_REPORT_ARGS[0], args);
final boolean listDead = StringUtils.popOption("-dead", args); final boolean listDead = StringUtils.popOption(DFS_REPORT_ARGS[1], args);
final boolean listDecommissioning = final boolean listDecommissioning =
StringUtils.popOption("-decommissioning", args); StringUtils.popOption(DFS_REPORT_ARGS[2], args);
final boolean listEnteringMaintenance = final boolean listEnteringMaintenance =
StringUtils.popOption("-enteringmaintenance", args); StringUtils.popOption(DFS_REPORT_ARGS[3], args);
final boolean listInMaintenance = final boolean listInMaintenance =
StringUtils.popOption("-inmaintenance", args); StringUtils.popOption(DFS_REPORT_ARGS[4], args);
final boolean listSlowNodes = final boolean listSlowNodes =
StringUtils.popOption("-slownodes", args); StringUtils.popOption(DFS_REPORT_ARGS[5], args);
// If no filter flags are found, then list all DN types // If no filter flags are found, then list all DN types
boolean listAll = (!listLive && !listDead && !listDecommissioning boolean listAll = (!listLive && !listDead && !listDecommissioning
@ -2338,7 +2341,7 @@ public int run(String[] argv) {
return exitCode; return exitCode;
} }
} else if ("-report".equals(cmd)) { } else if ("-report".equals(cmd)) {
if (argv.length > 6) { if (argv.length > DFS_REPORT_ARGS.length + 1) {
printUsage(cmd); printUsage(cmd);
return exitCode; return exitCode;
} }

View File

@ -786,6 +786,14 @@ public void testReportCommand() throws Exception {
resetStream(); resetStream();
assertEquals(0, ToolRunner.run(dfsAdmin, new String[] {"-report"})); assertEquals(0, ToolRunner.run(dfsAdmin, new String[] {"-report"}));
verifyNodesAndCorruptBlocks(numDn, numDn - 1, 1, 1, client, 0L, 0L); verifyNodesAndCorruptBlocks(numDn, numDn - 1, 1, 1, client, 0L, 0L);
// verify report command for list all DN types
resetStream();
String[] reportWithArg = new String[DFSAdmin.DFS_REPORT_ARGS.length + 1];
reportWithArg[0] = "-report";
System.arraycopy(DFSAdmin.DFS_REPORT_ARGS, 0, reportWithArg, 1,
DFSAdmin.DFS_REPORT_ARGS.length);
assertEquals(0, ToolRunner.run(dfsAdmin, reportWithArg));
} }
} }