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

This commit is contained in:
Zhijie Shen 2014-11-04 15:50:10 -08:00
parent 4ca67c09fc
commit e06c23a6c9
3 changed files with 23 additions and 13 deletions

View File

@ -826,6 +826,9 @@ Release 2.6.0 - UNRELEASED
of races between the launch and the stop-container call and when root of races between the launch and the stop-container call and when root
processes crash. (Billie Rinaldi via vinodkv) 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 Release 2.5.1 - 2014-09-05
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

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

View File

@ -34,7 +34,7 @@ public class TestContainerExecutor {
public void testRunCommandNoPriority() throws Exception { public void testRunCommandNoPriority() throws Exception {
Configuration conf = new Configuration(); Configuration conf = new Configuration();
String[] command = containerExecutor.getRunCommand("echo", "group1", "user", null, conf); 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")); command[0].equals(Shell.WINUTILS) || command[0].equals("bash"));
} }