You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ro...@apache.org on 2016/12/28 06:46:56 UTC

hadoop git commit: YARN-6001. Improve moveApplicationQueues command line. Contributed by Sunil G.

Repository: hadoop
Updated Branches:
  refs/heads/trunk 0840b4329 -> e297be74e


YARN-6001. Improve moveApplicationQueues command line. Contributed by Sunil G.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/e297be74
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/e297be74
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/e297be74

Branch: refs/heads/trunk
Commit: e297be74ed4c4334bf48dd01d3b10e302147041d
Parents: 0840b43
Author: Rohith Sharma K S <ro...@apache.org>
Authored: Wed Dec 28 12:16:11 2016 +0530
Committer: Rohith Sharma K S <ro...@apache.org>
Committed: Wed Dec 28 12:16:11 2016 +0530

----------------------------------------------------------------------
 .../hadoop/yarn/client/cli/ApplicationCLI.java  | 16 ++++-
 .../hadoop/yarn/client/cli/TestYarnCLI.java     | 62 +++++++++++++++++++-
 2 files changed, 76 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/e297be74/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java
index efe5921..893348a 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java
@@ -88,6 +88,7 @@ public class ApplicationCLI extends YarnCLI {
   public static final String APP_ID = "appId";
   public static final String UPDATE_PRIORITY = "updatePriority";
   public static final String UPDATE_LIFETIME = "updateLifetime";
+  public static final String CHANGE_APPLICATION_QUEUE = "changeQueue";
 
   private boolean allAppStates;
 
@@ -114,7 +115,7 @@ public class ApplicationCLI extends YarnCLI {
           + "based on application state and -appTags to filter applications "
           + "based on application tag.");
       opts.addOption(MOVE_TO_QUEUE_CMD, true, "Moves the application to a "
-          + "different queue.");
+          + "different queue. Deprecated command. Use 'changeQueue' instead.");
       opts.addOption(QUEUE_CMD, true, "Works with the movetoqueue command to"
           + " specify which queue to move an application to.");
       opts.addOption(HELP_CMD, false, "Displays help for all commands.");
@@ -146,6 +147,11 @@ public class ApplicationCLI extends YarnCLI {
       opts.addOption(UPDATE_LIFETIME, true,
           "update timeout of an application from NOW. ApplicationId can be"
               + " passed using 'appId' option. Timeout value is in seconds.");
+      opts.addOption(CHANGE_APPLICATION_QUEUE, true,
+          "Moves application to a new queue. ApplicationId can be"
+              + " passed using 'appId' option. 'movetoqueue' command is"
+              + " deprecated, this new command 'changeQueue' performs same"
+              + " functionality.");
       Option killOpt = new Option(KILL_CMD, true, "Kills the application. "
           + "Set of applications can be provided separated with space");
       killOpt.setValueSeparator(' ');
@@ -158,6 +164,7 @@ public class ApplicationCLI extends YarnCLI {
       opts.getOption(APP_ID).setArgName("Application ID");
       opts.getOption(UPDATE_PRIORITY).setArgName("Priority");
       opts.getOption(UPDATE_LIFETIME).setArgName("Timeout");
+      opts.getOption(CHANGE_APPLICATION_QUEUE).setArgName("Queue Name");
     } else if (args.length > 0 && args[0].equalsIgnoreCase(APPLICATION_ATTEMPT)) {
       title = APPLICATION_ATTEMPT;
       opts.addOption(STATUS_CMD, true,
@@ -315,6 +322,13 @@ public class ApplicationCLI extends YarnCLI {
 
       updateApplicationTimeout(cliParser.getOptionValue(APP_ID),
           ApplicationTimeoutType.LIFETIME, timeoutInSec);
+    } else if (cliParser.hasOption(CHANGE_APPLICATION_QUEUE)) {
+      if (!cliParser.hasOption(APP_ID)) {
+        printUsage(title, opts);
+        return exitCode;
+      }
+      moveApplicationAcrossQueues(cliParser.getOptionValue(APP_ID),
+          cliParser.getOptionValue(CHANGE_APPLICATION_QUEUE));
     } else if (cliParser.hasOption(SIGNAL_CMD)) {
       if (args.length < 3 || args.length > 4) {
         printUsage(title, opts);

http://git-wip-us.apache.org/repos/asf/hadoop/blob/e297be74/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java
index 2e90581..7cf9788 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java
@@ -1212,6 +1212,59 @@ public class TestYarnCLI {
   }
 
   @Test
+  public void testMoveApplicationAcrossQueuesWithNewCommand() throws Exception {
+    ApplicationCLI cli = createAndGetAppCLI();
+    ApplicationId applicationId = ApplicationId.newInstance(1234, 5);
+
+    ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
+        applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
+        "user", "queue", "appname", "host", 124, null,
+        YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
+        FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
+    when(client.getApplicationReport(any(ApplicationId.class)))
+        .thenReturn(newApplicationReport2);
+    int result = cli.run(new String[]{"application", "-appId",
+        applicationId.toString(), "-changeQueue", "targetqueue"});
+    assertEquals(0, result);
+    verify(client, times(0)).moveApplicationAcrossQueues(
+        any(ApplicationId.class), any(String.class));
+    verify(sysOut)
+        .println("Application " + applicationId + " has already finished ");
+
+    ApplicationReport newApplicationReport = ApplicationReport.newInstance(
+        applicationId, ApplicationAttemptId.newInstance(applicationId, 1),
+        "user", "queue", "appname", "host", 124, null,
+        YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
+        FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
+    when(client.getApplicationReport(any(ApplicationId.class)))
+        .thenReturn(newApplicationReport);
+    result = cli.run(new String[]{"application", "-appId",
+        applicationId.toString(), "-changeQueue", "targetqueue"});
+    assertEquals(0, result);
+    verify(client).moveApplicationAcrossQueues(any(ApplicationId.class),
+        any(String.class));
+    verify(sysOut).println(
+        "Moving application application_1234_0005 to queue targetqueue");
+    verify(sysOut).println("Successfully completed move.");
+
+    doThrow(new ApplicationNotFoundException(
+        "Application with id '" + applicationId + "' doesn't exist in RM."))
+            .when(client)
+            .moveApplicationAcrossQueues(applicationId, "targetqueue");
+    cli = createAndGetAppCLI();
+    try {
+      result = cli.run(new String[]{"application", "-appId",
+          applicationId.toString(), "-changeQueue", "targetqueue"});
+      Assert.fail();
+    } catch (Exception ex) {
+      Assert.assertTrue(ex instanceof ApplicationNotFoundException);
+      Assert.assertEquals(
+          "Application with id '" + applicationId + "' doesn't exist in RM.",
+          ex.getMessage());
+    }
+  }
+
+  @Test
   public void testListClusterNodes() throws Exception {
     List<NodeReport> nodeReports = new ArrayList<NodeReport>();
     nodeReports.addAll(getNodeReports(1, NodeState.NEW));
@@ -1972,6 +2025,12 @@ public class TestYarnCLI {
     pw.println(" -appTypes <Types>               Works with -list to filter applications");
     pw.println("                                 based on input comma-separated list of");
     pw.println("                                 application types.");
+    pw.println(" -changeQueue <Queue Name>       Moves application to a new queue.");
+    pw.println("                                 ApplicationId can be passed using 'appId'");
+    pw.println("                                 option. 'movetoqueue' command is");
+    pw.println("                                 deprecated, this new command");
+    pw.println("                                 'changeQueue' performs same");
+    pw.println("                                 functionality.");
     pw.println(" -help                           Displays help for all commands.");
     pw.println(" -kill <Application ID>          Kills the application. Set of");
     pw.println("                                 applications can be provided separated");
@@ -1983,7 +2042,8 @@ public class TestYarnCLI {
     pw.println("                                 and -appTags to filter applications based");
     pw.println("                                 on application tag.");
     pw.println(" -movetoqueue <Application ID>   Moves the application to a different");
-    pw.println("                                 queue.");
+    pw.println("                                 queue. Deprecated command. Use");
+    pw.println("                                 'changeQueue' instead.");
     pw.println(" -queue <Queue Name>             Works with the movetoqueue command to");
     pw.println("                                 specify which queue to move an");
     pw.println("                                 application to.");


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org