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 sr...@apache.org on 2012/04/28 00:54:45 UTC
svn commit: r1331621 - in /hadoop/common/branches/branch-1-win: ./
src/core/org/apache/hadoop/util/ src/mapred/org/apache/hadoop/mapred/
src/test/org/apache/hadoop/mapred/
Author: sradia
Date: Fri Apr 27 22:54:44 2012
New Revision: 1331621
URL: http://svn.apache.org/viewvc?rev=1331621&view=rev
Log:
MAPREDUCE-4201 - Getting PID not working on Windows. Termination of Task/TaskJVM's not working (Bikas Saha via Sanjay)
Modified:
hadoop/common/branches/branch-1-win/CHANGES.txt
hadoop/common/branches/branch-1-win/src/core/org/apache/hadoop/util/ProcessTree.java
hadoop/common/branches/branch-1-win/src/mapred/org/apache/hadoop/mapred/Child.java
hadoop/common/branches/branch-1-win/src/mapred/org/apache/hadoop/mapred/JvmManager.java
hadoop/common/branches/branch-1-win/src/test/org/apache/hadoop/mapred/TestKillSubProcesses.java
Modified: hadoop/common/branches/branch-1-win/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/CHANGES.txt?rev=1331621&r1=1331620&r2=1331621&view=diff
==============================================================================
--- hadoop/common/branches/branch-1-win/CHANGES.txt (original)
+++ hadoop/common/branches/branch-1-win/CHANGES.txt Fri Apr 27 22:54:44 2012
@@ -11,6 +11,8 @@ branch-hadoop-1-win - unreleased
HADOOP-8234 - Enable user group mappings on Windows (Bikas Saha via Sanjay)
+ MAPREDUCE-4201 - Getting PID not working on Windows. Termination of Task/TaskJVM's not working (Bikas Saha via Sanjay)
+
Release 1.1.0 - unreleased
NEW FEATURES
Modified: hadoop/common/branches/branch-1-win/src/core/org/apache/hadoop/util/ProcessTree.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/core/org/apache/hadoop/util/ProcessTree.java?rev=1331621&r1=1331620&r2=1331621&view=diff
==============================================================================
--- hadoop/common/branches/branch-1-win/src/core/org/apache/hadoop/util/ProcessTree.java (original)
+++ hadoop/common/branches/branch-1-win/src/core/org/apache/hadoop/util/ProcessTree.java Fri Apr 27 22:54:44 2012
@@ -107,7 +107,19 @@ public class ProcessTree {
if(!ProcessTree.isAlive(pid)) {
return;
}
- String[] args = { "kill", "-" + signal.getValue(), pid };
+ String[] args = null;
+ if(Shell.WINDOWS){
+ if (signal == Signal.KILL) {
+ String[] wargs = { "taskkill", "/F", "/PID", pid };
+ args = wargs;
+ } else {
+ String[] wargs = { "taskkill", "/PID", pid };
+ args = wargs;
+ }
+ } else {
+ String[] uargs = { "kill", "-" + signal.getValue(), pid };
+ args = uargs;
+ }
ShellCommandExecutor shexec = new ShellCommandExecutor(args);
try {
shexec.execute();
@@ -157,19 +169,29 @@ public class ProcessTree {
* @return true if process is alive.
*/
public static boolean isAlive(String pid) {
- ShellCommandExecutor shexec = null;
- try {
- String[] args = { "kill", "-0", pid };
- shexec = new ShellCommandExecutor(args);
- shexec.execute();
- } catch (ExitCodeException ee) {
- return false;
- } catch (IOException ioe) {
- LOG.warn("Error executing shell command "
- + Arrays.toString(shexec.getExecString()) + ioe);
- return false;
+ if (Shell.WINDOWS) {
+ try {
+ String result = Shell.execCommand("cmd", "/c", "tasklist /FI \"PID eq "+pid+" \" /NH");
+ return (result.contains(pid));
+ } catch (IOException ioe) {
+ LOG.warn("Error executing shell command", ioe);
+ return false;
+ }
+ } else {
+ ShellCommandExecutor shexec = null;
+ try {
+ String[] args = { "kill", "-0", pid };
+ shexec = new ShellCommandExecutor(args);
+ shexec.execute();
+ } catch (ExitCodeException ee) {
+ return false;
+ } catch (IOException ioe) {
+ LOG.warn("Error executing shell command "
+ + Arrays.toString(shexec.getExecString()) + ioe);
+ return false;
+ }
+ return (shexec.getExitCode() == 0 ? true : false);
}
- return (shexec.getExitCode() == 0 ? true : false);
}
/**
Modified: hadoop/common/branches/branch-1-win/src/mapred/org/apache/hadoop/mapred/Child.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/mapred/org/apache/hadoop/mapred/Child.java?rev=1331621&r1=1331620&r2=1331621&view=diff
==============================================================================
--- hadoop/common/branches/branch-1-win/src/mapred/org/apache/hadoop/mapred/Child.java (original)
+++ hadoop/common/branches/branch-1-win/src/mapred/org/apache/hadoop/mapred/Child.java Fri Apr 27 22:54:44 2012
@@ -47,6 +47,8 @@ import org.apache.hadoop.util.Shell;
import org.apache.hadoop.util.StringUtils;
import org.apache.log4j.LogManager;
+import java.lang.management.ManagementFactory;
+
/**
* The main() for child processes.
*/
@@ -85,7 +87,6 @@ class Child {
throw new IOException("Environment variable " +
TaskRunner.HADOOP_WORK_DIR + " is not set");
}
-
// file name is passed thru env
String jobTokenFile =
System.getenv().get(UserGroupInformation.HADOOP_TOKEN_FILE_LOCATION);
@@ -163,6 +164,15 @@ class Child {
if (!Shell.WINDOWS) {
pid = System.getenv().get("JVM_PID");
}
+ else {
+ final String jvmName = ManagementFactory.getRuntimeMXBean().getName();
+ String[] parts = jvmName.split("@");
+ try {
+ pid = Long.toString(Long.parseLong(parts[0]));
+ } catch (NumberFormatException nfe) {
+ LOG.equals("Failed to get pid for jvmId:" + jvmId);
+ }
+ }
JvmContext context = new JvmContext(jvmId, pid);
int idleLoopCount = 0;
Task task = null;
Modified: hadoop/common/branches/branch-1-win/src/mapred/org/apache/hadoop/mapred/JvmManager.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/mapred/org/apache/hadoop/mapred/JvmManager.java?rev=1331621&r1=1331620&r2=1331621&view=diff
==============================================================================
--- hadoop/common/branches/branch-1-win/src/mapred/org/apache/hadoop/mapred/JvmManager.java (original)
+++ hadoop/common/branches/branch-1-win/src/mapred/org/apache/hadoop/mapred/JvmManager.java Fri Apr 27 22:54:44 2012
@@ -506,8 +506,7 @@ class JvmManager {
} finally { // handle the exit code
// although the process has exited before we get here,
// make sure the entire process group has also been killed.
- if (!Shell.WINDOWS)
- kill();
+ kill();
updateOnJvmExit(jvmId, exitCode);
LOG.info("JVM : " + jvmId + " exited with exit code " + exitCode
+ ". Number of tasks it ran: " + numTasksRan);
Modified: hadoop/common/branches/branch-1-win/src/test/org/apache/hadoop/mapred/TestKillSubProcesses.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/test/org/apache/hadoop/mapred/TestKillSubProcesses.java?rev=1331621&r1=1331620&r2=1331621&view=diff
==============================================================================
--- hadoop/common/branches/branch-1-win/src/test/org/apache/hadoop/mapred/TestKillSubProcesses.java (original)
+++ hadoop/common/branches/branch-1-win/src/test/org/apache/hadoop/mapred/TestKillSubProcesses.java Fri Apr 27 22:54:44 2012
@@ -301,11 +301,12 @@ public class TestKillSubProcesses extend
return UtilsForTests.runJob(conf, inDir, outDir);
}
-
+
public void testJobKillFailAndSucceed() throws IOException {
- if (Shell.WINDOWS) {
- System.out.println(
- "setsid doesn't work on WINDOWS as expected. Not testing");
+ if (Shell.DISABLEWINDOWS_TEMPORARILY) {
+ System.out
+ .println("setsid doesn't work on WINDOWS as expected. Not testing."
+ + "There also seem to be issues related to file permissions");
return;
}