diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/NodeCLI.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/NodeCLI.java index afe3287..aae36c9 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/NodeCLI.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/NodeCLI.java @@ -67,7 +67,8 @@ public int run(String[] args) throws Exception { "Supports optional use of --states to filter nodes " + "based on node state, all --all to list all nodes."); Option nodeStateOpt = new Option(NODE_STATE_CMD, true, - "Works with -list to filter nodes based on their states."); + "Works with -list to filter nodes based on their states. " + + getAllValidNodeStates()); nodeStateOpt.setValueSeparator(','); nodeStateOpt.setArgs(Option.UNLIMITED_VALUES); nodeStateOpt.setArgName("Comma-separated list of node states"); @@ -75,6 +76,15 @@ public int run(String[] args) throws Exception { Option allOpt = new Option(NODE_ALL, false, "Works with -list to list all nodes."); opts.addOption(allOpt); + + if (args != null && args.length > 0) { + for (int i = args.length - 1; i >= 0; i --) { + if (args[i].equalsIgnoreCase("--" + NODE_ALL)) { + args[i] = "--" + NODE_ALL; + } + } + } + CommandLine cliParser = new GnuParser().parse(opts, args); int exitCode = -1; @@ -95,7 +105,13 @@ public int run(String[] args) throws Exception { if (types != null) { for (String type : types) { if (!type.trim().isEmpty()) { - nodeStates.add(NodeState.valueOf(type.trim().toUpperCase())); + try { + nodeStates.add(NodeState.valueOf(type.trim().toUpperCase())); + } catch (IllegalArgumentException ex) { + sysout.println("The node state " + type + " is invalid."); + sysout.println(getAllValidNodeStates()); + return exitCode; + } } } } @@ -198,4 +214,14 @@ private void printNodeStatus(String nodeIdStr) throws YarnException, nodeReportStr.close(); sysout.println(baos.toString("UTF-8")); } + + private String getAllValidNodeStates() { + StringBuilder sb = new StringBuilder(); + sb.append("The valid node state can be one of the following: "); + for (NodeState state : NodeState.values()) { + sb.append(state).append(","); + } + String output = sb.toString(); + return output.substring(0, output.length() - 1); + } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java index 6d53108..6e614a2 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java @@ -731,6 +731,11 @@ public void testListClusterNodes() throws Exception { nodesReportStr = baos.toString("UTF-8"); Assert.assertEquals(nodesReportStr, sysOutStream.toString()); verify(sysOut, times(9)).write(any(byte[].class), anyInt(), anyInt()); + + sysOutStream.reset(); + result = cli.run(new String[] { "-list", "--states", + "InvalidState" }); + assertEquals(-1, result); } private List getNodeReports(