1
0
Selaa lähdekoodia

YARN-2752. Made ContainerExecutor append "nice -n" arg only when priority adjustment flag is set. Contributed by Xuan Gong.

(cherry picked from commit e06c23a6c92ef783cdb45447fa2abd1ab48d166f)
Zhijie Shen 10 vuotta sitten
vanhempi
commit
1550617e48

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

@@ -781,6 +781,9 @@ Release 2.6.0 - UNRELEASED
     of races between the launch and the stop-container call and when root
     processes crash. (Billie Rinaldi via vinodkv)
 
+    YARN-2752. Made ContainerExecutor append "nice -n" arg only when priority
+    adjustment flag is set. (Xuan Gong via zjshen)
+
 Release 2.5.1 - 2014-09-05
 
   INCOMPATIBLE CHANGES

+ 19 - 12
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java

@@ -276,32 +276,39 @@ public abstract class ContainerExecutor implements Configurable {
   }
   
   /** 
-   * Return a command to execute the given command in OS shell.
-   * On Windows, the passed in groupId can be used to launch
-   * and associate the given groupId in a process group. On
-   * non-Windows, groupId is ignored.
+   *  Return a command to execute the given command in OS shell.
+   *  On Windows, the passed in groupId can be used to launch
+   *  and associate the given groupId in a process group. On
+   *  non-Windows, groupId is ignored. 
    */
   protected String[] getRunCommand(String command, String groupId,
-       String userName, Path pidFile, Configuration conf) {
+      String userName, Path pidFile, Configuration conf) {
+    boolean containerSchedPriorityIsSet = false;
     int containerSchedPriorityAdjustment = 
         YarnConfiguration.DEFAULT_NM_CONTAINER_EXECUTOR_SCHED_PRIORITY;
-    if (conf.get(YarnConfiguration.NM_CONTAINER_EXECUTOR_SCHED_PRIORITY) !=
+
+    if (conf.get(YarnConfiguration.NM_CONTAINER_EXECUTOR_SCHED_PRIORITY) != 
         null) {
-      containerSchedPriorityAdjustment = conf
-          .getInt(YarnConfiguration.NM_CONTAINER_EXECUTOR_SCHED_PRIORITY, 0);
+      containerSchedPriorityIsSet = true;
+      containerSchedPriorityAdjustment = conf 
+          .getInt(YarnConfiguration.NM_CONTAINER_EXECUTOR_SCHED_PRIORITY, 
+          YarnConfiguration.DEFAULT_NM_CONTAINER_EXECUTOR_SCHED_PRIORITY);
     }
-    
+  
     if (Shell.WINDOWS) {
       return new String[] { Shell.WINUTILS, "task", "create", groupId,
           "cmd /c " + command };
     } else {
       List<String> retCommand = new ArrayList<String>();
-      retCommand.addAll(Arrays.asList("nice", "-n",
-          Integer.toString(containerSchedPriorityAdjustment)));
+      if (containerSchedPriorityIsSet) {
+        retCommand.addAll(Arrays.asList("nice", "-n",
+            Integer.toString(containerSchedPriorityAdjustment)));
+      }
       retCommand.addAll(Arrays.asList("bash", command));
       return retCommand.toArray(new String[retCommand.size()]);
     }
-  }   
+
+  }
 
   /**
    * Is the container still active?

+ 1 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestContainerExecutor.java

@@ -34,7 +34,7 @@ public class TestContainerExecutor {
   public void testRunCommandNoPriority() throws Exception {
     Configuration conf = new Configuration();
     String[] command = containerExecutor.getRunCommand("echo", "group1", "user", null, conf);
-    assertTrue("first command should be the run command for the platform " + command[0], 
+    assertTrue("first command should be the run command for the platform", 
                command[0].equals(Shell.WINUTILS) || command[0].equals("bash"));  
   }