Przeglądaj źródła

YARN-2827. Fixed bugs in "yarn queue" CLI. Contributed by Wangda Tan.

Vinod Kumar Vavilapalli 10 lat temu
rodzic
commit
7b19079657

+ 2 - 0
hadoop-yarn-project/CHANGES.txt

@@ -871,6 +871,8 @@ Release 2.6.0 - UNRELEASED
     not mapped to queues by making default capacities per label to be zero.
     not mapped to queues by making default capacities per label to be zero.
     (Wangda Tan via vinodkv)
     (Wangda Tan via vinodkv)
 
 
+    YARN-2827. Fixed bugs in "yarn queue" CLI. (Wangda Tan via vinodkv).
+
 Release 2.5.2 - UNRELEASED
 Release 2.5.2 - UNRELEASED
 
 
   INCOMPATIBLE CHANGES
   INCOMPATIBLE CHANGES

+ 1 - 1
hadoop-yarn-project/hadoop-yarn/bin/yarn

@@ -215,7 +215,7 @@ elif [ "$COMMAND" = "application" ] ||
 elif [ "$COMMAND" = "node" ] ; then
 elif [ "$COMMAND" = "node" ] ; then
   CLASS=org.apache.hadoop.yarn.client.cli.NodeCLI
   CLASS=org.apache.hadoop.yarn.client.cli.NodeCLI
   YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"
   YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"
-elif [ "COMMAND" = "queue" ] ; then
+elif [ "$COMMAND" = "queue" ] ; then
   CLASS=org.apache.hadoop.yarn.client.cli.QueueCLI
   CLASS=org.apache.hadoop.yarn.client.cli.QueueCLI
   YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"
   YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"
 elif [ "$COMMAND" = "resourcemanager" ] ; then
 elif [ "$COMMAND" = "resourcemanager" ] ; then

+ 22 - 18
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/QueueCLI.java

@@ -52,16 +52,11 @@ public class QueueCLI extends YarnCLI {
   @Override
   @Override
   public int run(String[] args) throws Exception {
   public int run(String[] args) throws Exception {
     Options opts = new Options();
     Options opts = new Options();
-    int exitCode = -1;
-    if (args.length > 0) {
-      opts.addOption(STATUS_CMD, true,
-          "List queue information about given queue.");
-      opts.addOption(HELP_CMD, false, "Displays help for all commands.");
-      opts.getOption(STATUS_CMD).setArgName("Queue Name");
-    } else {
-      syserr.println("Invalid Command usage. Command must start with 'queue'");
-      return exitCode;
-    }
+
+    opts.addOption(STATUS_CMD, true,
+        "List queue information about given queue.");
+    opts.addOption(HELP_CMD, false, "Displays help for all commands.");
+    opts.getOption(STATUS_CMD).setArgName("Queue Name");
 
 
     CommandLine cliParser = null;
     CommandLine cliParser = null;
     try {
     try {
@@ -69,23 +64,23 @@ public class QueueCLI extends YarnCLI {
     } catch (MissingArgumentException ex) {
     } catch (MissingArgumentException ex) {
       sysout.println("Missing argument for options");
       sysout.println("Missing argument for options");
       printUsage(opts);
       printUsage(opts);
-      return exitCode;
+      return -1;
     }
     }
 
 
     if (cliParser.hasOption(STATUS_CMD)) {
     if (cliParser.hasOption(STATUS_CMD)) {
-      if (args.length != 3) {
+      if (args.length != 2) {
         printUsage(opts);
         printUsage(opts);
-        return exitCode;
+        return -1;
       }
       }
-      listQueue(cliParser.getOptionValue(STATUS_CMD));
+      return listQueue(cliParser.getOptionValue(STATUS_CMD));
     } else if (cliParser.hasOption(HELP_CMD)) {
     } else if (cliParser.hasOption(HELP_CMD)) {
       printUsage(opts);
       printUsage(opts);
       return 0;
       return 0;
     } else {
     } else {
       syserr.println("Invalid Command Usage : ");
       syserr.println("Invalid Command Usage : ");
       printUsage(opts);
       printUsage(opts);
+      return -1;
     }
     }
-    return 0;
   }
   }
 
 
   /**
   /**
@@ -105,13 +100,22 @@ public class QueueCLI extends YarnCLI {
    * @throws YarnException
    * @throws YarnException
    * @throws IOException
    * @throws IOException
    */
    */
-  private void listQueue(String queueName) throws YarnException, IOException {
+  private int listQueue(String queueName) throws YarnException, IOException {
+    int rc;
     PrintWriter writer = new PrintWriter(sysout);
     PrintWriter writer = new PrintWriter(sysout);
 
 
     QueueInfo queueInfo = client.getQueueInfo(queueName);
     QueueInfo queueInfo = client.getQueueInfo(queueName);
-    writer.println("Queue Information : ");
-    printQueueInfo(writer, queueInfo);
+    if (queueInfo != null) {
+      writer.println("Queue Information : ");
+      printQueueInfo(writer, queueInfo);
+      rc = 0;
+    } else {
+      writer.println("Cannot get queue from RM by queueName = " + queueName
+          + ", please check.");
+      rc = -1;
+    }
     writer.flush();
     writer.flush();
+    return rc;
   }
   }
 
 
   private void printQueueInfo(PrintWriter writer, QueueInfo queueInfo) {
   private void printQueueInfo(PrintWriter writer, QueueInfo queueInfo) {

+ 19 - 2
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java

@@ -1247,7 +1247,7 @@ public class TestYarnCLI {
     QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f,
     QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f,
         null, null, QueueState.RUNNING, nodeLabels, "GPU");
         null, null, QueueState.RUNNING, nodeLabels, "GPU");
     when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo);
     when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo);
-    int result = cli.run(new String[] { "queue", "-status", "queueA" });
+    int result = cli.run(new String[] { "-status", "queueA" });
     assertEquals(0, result);
     assertEquals(0, result);
     verify(client).getQueueInfo("queueA");
     verify(client).getQueueInfo("queueA");
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -1271,7 +1271,7 @@ public class TestYarnCLI {
     QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f,
     QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f,
         null, null, QueueState.RUNNING, null, null);
         null, null, QueueState.RUNNING, null, null);
     when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo);
     when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo);
-    int result = cli.run(new String[] { "queue", "-status", "queueA" });
+    int result = cli.run(new String[] { "-status", "queueA" });
     assertEquals(0, result);
     assertEquals(0, result);
     verify(client).getQueueInfo("queueA");
     verify(client).getQueueInfo("queueA");
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -1288,6 +1288,23 @@ public class TestYarnCLI {
     String queueInfoStr = baos.toString("UTF-8");
     String queueInfoStr = baos.toString("UTF-8");
     Assert.assertEquals(queueInfoStr, sysOutStream.toString());
     Assert.assertEquals(queueInfoStr, sysOutStream.toString());
   }
   }
+  
+  @Test
+  public void testGetQueueInfoWithNonExistedQueue() throws Exception {
+    String queueName = "non-existed-queue";
+    QueueCLI cli = createAndGetQueueCLI();
+    when(client.getQueueInfo(any(String.class))).thenReturn(null);
+    int result = cli.run(new String[] { "-status", queueName });
+    assertEquals(-1, result);;
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    PrintWriter pw = new PrintWriter(baos);
+    pw.println("Cannot get queue from RM by queueName = " + queueName
+        + ", please check.");
+    pw.close();
+    String queueInfoStr = baos.toString("UTF-8");
+    Assert.assertEquals(queueInfoStr, sysOutStream.toString());
+  }
+
 
 
   private void verifyUsageInfo(YarnCLI cli) throws Exception {
   private void verifyUsageInfo(YarnCLI cli) throws Exception {
     cli.setSysErrPrintStream(sysErr);
     cli.setSysErrPrintStream(sysErr);