diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/RMAdminCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/RMAdminCLI.java index 489509b849d..e1e3d79dde3 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/RMAdminCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/RMAdminCLI.java @@ -184,17 +184,20 @@ protected void setOut(PrintStream out) { this.out = out; } - private static void appendHAUsage(final StringBuilder usageBuilder) { - for (Map.Entry cmdEntry : USAGE.entrySet()) { + private static void appendHAUsage( + final StringBuilder usageBuilder, + String prefix, + String surfix) { + for (Map.Entry cmdEntry : USAGE.entrySet()) { if (cmdEntry.getKey().equals("-help")) { continue; } UsageInfo usageInfo = cmdEntry.getValue(); if (usageInfo.args == null) { - usageBuilder.append(" [" + cmdEntry.getKey() + "]"); + usageBuilder.append(prefix).append(cmdEntry.getKey()).append(surfix); } else { - usageBuilder.append(" [" + cmdEntry.getKey() + " " + usageInfo.args - + "]"); + usageBuilder.append(prefix).append(cmdEntry.getKey()).append(" "). + append(usageInfo.args).append(surfix); } } } @@ -217,52 +220,55 @@ private static void buildHelpMsg(String cmd, StringBuilder builder) { } private static void buildIndividualUsageMsg(String cmd, - StringBuilder builder ) { - boolean isHACommand = false; + StringBuilder builder) { UsageInfo usageInfo = ADMIN_USAGE.get(cmd); if (usageInfo == null) { usageInfo = USAGE.get(cmd); if (usageInfo == null) { return; } - isHACommand = true; } if (usageInfo.args == null) { - builder.append("Usage: yarn rmadmin [" + cmd + "]\n"); + builder.append("[" + cmd + "]\n"); } else { String space = (usageInfo.args == "") ? "" : " "; - builder.append("Usage: yarn rmadmin [" + cmd + space + usageInfo.args - + "]\n"); - } - if (isHACommand) { - builder.append(cmd + " can only be used when RM HA is enabled"); + builder.append("[" + cmd + space + usageInfo.args + "]\n"); } } private static void buildUsageMsg(StringBuilder builder, boolean isHAEnabled) { - builder.append("Usage: yarn rmadmin\n"); - for (Map.Entry cmdEntry : ADMIN_USAGE.entrySet()) { + String preSpace = " "; + String surSpace = "\n"; + for (Map.Entry cmdEntry : ADMIN_USAGE.entrySet()) { UsageInfo usageInfo = cmdEntry.getValue(); - builder.append(" " + cmdEntry.getKey() + " " + usageInfo.args + "\n"); + builder.append(preSpace).append(cmdEntry.getKey()) + .append(" ").append(usageInfo.args).append(surSpace); } if (isHAEnabled) { - for (Map.Entry cmdEntry : USAGE.entrySet()) { - String cmdKey = cmdEntry.getKey(); - if (!cmdKey.equals("-help")) { - UsageInfo usageInfo = cmdEntry.getValue(); - if (usageInfo.args == null) { - builder.append(" " + cmdKey + "\n"); - } else { - builder.append(" " + cmdKey + " " + usageInfo.args + "\n"); - } - } - } + appendHAUsage(builder, preSpace, surSpace); } builder.append(" -help" + " [cmd]\n"); } private static void printHelp(String cmd, boolean isHAEnabled) { + + if (ADMIN_USAGE.containsKey(cmd) || USAGE.containsKey(cmd)) { + StringBuilder summary = new StringBuilder(); + summary.append("Usage: yarn rmadmin").append(" "); + buildIndividualUsageMsg(cmd, summary); + summary.append("\n"); + buildHelpMsg(cmd, summary); + System.err.println(summary); + System.err.println(); + ToolRunner.printGenericCommandUsage(System.err); + } else { + System.err.println(cmd + ": Unknown command"); + printUsage(cmd, isHAEnabled); + } + } + + private static void printHelp(boolean isHAEnabled) { StringBuilder summary = new StringBuilder(); summary.append("rmadmin is the command to execute YARN administrative " + "commands.\n"); @@ -288,7 +294,7 @@ private static void printHelp(String cmd, boolean isHAEnabled) { + " ([OvercommitTimeout]) or -updateNodeResource [NodeID] " + "[ResourceTypes] ([OvercommitTimeout])]"); if (isHAEnabled) { - appendHAUsage(summary); + appendHAUsage(summary, " [", "]"); } summary.append(" [-help [cmd]]") .append("\n"); @@ -320,9 +326,16 @@ private static void printHelp(String cmd, boolean isHAEnabled) { */ private static void printUsage(String cmd, boolean isHAEnabled) { StringBuilder usageBuilder = new StringBuilder(); + usageBuilder.append("Usage: yarn rmadmin"); + if (ADMIN_USAGE.containsKey(cmd) || USAGE.containsKey(cmd)) { + usageBuilder.append(" "); buildIndividualUsageMsg(cmd, usageBuilder); + if (USAGE.containsKey(cmd) && !cmd.equals("-help")) { + usageBuilder.append(cmd + " can only be used when RM HA is enabled"); + } } else { + usageBuilder.append("\n"); buildUsageMsg(usageBuilder, isHAEnabled); } System.err.println(usageBuilder); @@ -452,7 +465,7 @@ private int refreshSuperUserGroupsConfiguration() throws IOException, private int refreshAdminAcls() throws IOException, YarnException { // Refresh the admin acls ResourceManagerAdministrationProtocol adminProtocol = createAdminProtocol(); - RefreshAdminAclsRequest request = + RefreshAdminAclsRequest request = recordFactory.newRecordInstance(RefreshAdminAclsRequest.class); adminProtocol.refreshAdminAcls(request); return 0; @@ -720,9 +733,9 @@ public int run(String[] args) throws Exception { exitCode = 0; if ("-help".equals(cmd)) { if (i < args.length) { - printUsage(args[i], isHAEnabled); + printHelp(args[i], isHAEnabled); } else { - printHelp("", isHAEnabled); + printHelp(isHAEnabled); } return exitCode; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestRMAdminCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestRMAdminCLI.java index 40b393ff3f3..fe7ccc0bc7c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestRMAdminCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestRMAdminCLI.java @@ -779,7 +779,7 @@ public void testHelp() throws Exception { "Usage: yarn rmadmin [-checkHealth ]", dataErr, 0); testError(new String[] { "-help", "-badParameter" }, - "Usage: yarn rmadmin", dataErr, 0); + "badParameter: Unknown command", dataErr, 0); testError(new String[] { "-badParameter" }, "badParameter: Unknown command", dataErr, -1); @@ -1091,12 +1091,12 @@ public void testNoUnsupportedHACommandsInHelp() throws Exception { String[] args2 = {"-help", "-transitionToObserver"}; assertEquals(0, rmAdminCLIWithHAEnabled.run(args2)); errOut = dataErr.toString(); - assertFalse(errOut.contains("-transitionToObserver")); + assertTrue(errOut.contains("transitionToObserver: Unknown command")); dataErr.reset(); args2[1] = "-failover"; assertEquals(0, rmAdminCLIWithHAEnabled.run(args2)); errOut = dataErr.toString(); - assertFalse(errOut.contains("-failover")); + assertTrue(errOut.contains("failover: Unknown command")); dataErr.reset(); } }