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 ac...@apache.org on 2012/12/07 19:52:25 UTC
svn commit: r1418433 - in
/hadoop/common/branches/branch-trunk-win/hadoop-common-project/hadoop-common/src/main:
java/org/apache/hadoop/util/Shell.java winutils/task.c
Author: acmurthy
Date: Fri Dec 7 18:52:24 2012
New Revision: 1418433
URL: http://svn.apache.org/viewvc?rev=1418433&view=rev
Log:
YARN-233. Added support for running containers in MS Windows to YARN. Contributed by Chris Nauroth.
Modified:
hadoop/common/branches/branch-trunk-win/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/Shell.java
hadoop/common/branches/branch-trunk-win/hadoop-common-project/hadoop-common/src/main/winutils/task.c
Modified: hadoop/common/branches/branch-trunk-win/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/Shell.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-trunk-win/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/Shell.java?rev=1418433&r1=1418432&r2=1418433&view=diff
==============================================================================
--- hadoop/common/branches/branch-trunk-win/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/Shell.java (original)
+++ hadoop/common/branches/branch-trunk-win/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/Shell.java Fri Dec 7 18:52:24 2012
@@ -119,6 +119,32 @@ abstract public class Shell {
return WINDOWS ? new String[] { WINUTILS, "symlink", link, target }
: new String[] { "ln", "-s", target, link };
}
+
+ /** 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. */
+ public static String[] getRunCommand(String command,
+ String groupId) {
+ if (WINDOWS) {
+ return new String[] { WINUTILS, "task", "create", groupId,
+ "cmd /c " + command };
+ } else {
+ return new String[] { "bash", "-c", command };
+ }
+ }
+
+ /** Return a command for determining if process with specified pid is alive. */
+ public static String[] getCheckProcessIsAliveCommand(String pid) {
+ return WINDOWS ? new String[] { WINUTILS, "task", "isAlive", pid } :
+ new String[] { "kill", "-0", isSetsidAvailable ? "-" + pid : pid };
+ }
+
+ /** Return a command to send a signal to a given pid */
+ public static String[] getSignalKillCommand(int code, String pid) {
+ return WINDOWS ? new String[] { WINUTILS, "task", "kill", pid } :
+ new String[] { "kill", "-" + code, isSetsidAvailable ? "-" + pid : pid };
+ }
/** a Unix command to set permission */
public static final String SET_PERMISSION_COMMAND = "chmod";
@@ -140,7 +166,30 @@ abstract public class Shell {
/** Set to true on Windows platforms */
public static final boolean WINDOWS /* borrowed from Path.WINDOWS */
= System.getProperty("os.name").startsWith("Windows");
+
+ public static final boolean LINUX
+ = System.getProperty("os.name").startsWith("Linux");
+ public static final boolean isSetsidAvailable = isSetsidSupported();
+ private static boolean isSetsidSupported() {
+ if (WINDOWS) {
+ return true;
+ }
+ ShellCommandExecutor shexec = null;
+ boolean setsidSupported = true;
+ try {
+ String[] args = {"setsid", "bash", "-c", "echo $$"};
+ shexec = new ShellCommandExecutor(args);
+ shexec.execute();
+ } catch (IOException ioe) {
+ LOG.warn("setsid is not available on this machine. So not using it.");
+ setsidSupported = false;
+ } finally { // handle the exit code
+ LOG.info("setsid exited with exit code " + shexec.getExitCode());
+ }
+ return setsidSupported;
+ }
+
private long interval; // refresh interval in msec
private long lastTime; // last time the command was performed
private Map<String, String> environment; // env for the command execution
Modified: hadoop/common/branches/branch-trunk-win/hadoop-common-project/hadoop-common/src/main/winutils/task.c
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-trunk-win/hadoop-common-project/hadoop-common/src/main/winutils/task.c?rev=1418433&r1=1418432&r2=1418433&view=diff
==============================================================================
--- hadoop/common/branches/branch-trunk-win/hadoop-common-project/hadoop-common/src/main/winutils/task.c (original)
+++ hadoop/common/branches/branch-trunk-win/hadoop-common-project/hadoop-common/src/main/winutils/task.c Fri Dec 7 18:52:24 2012
@@ -22,6 +22,8 @@
#define PSAPI_VERSION 1
#pragma comment(lib, "psapi.lib")
+#define ERROR_TASK_NOT_ALIVE 1
+
// List of different task related command line options supported by
// winutils.
typedef enum TaskCommandOptionType
@@ -401,6 +403,12 @@ int Task(int argc, wchar_t *argv[])
{
fwprintf(stdout, L"IsAlive,%d\n", numProcs);
}
+ else
+ {
+ dwErrorCode = ERROR_TASK_NOT_ALIVE;
+ ReportErrorCode(L"isTaskAlive returned false", dwErrorCode);
+ goto TaskExit;
+ }
} else if (command == TaskKill)
{
// Check if task jobobject
@@ -450,4 +458,4 @@ void TaskUsage()
and comma separated info per process\n\
ProcessId,VirtualMemoryCommitted(bytes),\n\
WorkingSetSize(bytes),CpuTime(Millisec,Kernel+User)\n");
-}
\ No newline at end of file
+}