diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor.java index 63da89e..1fab564 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor.java @@ -380,17 +380,28 @@ public WindowsLocalWrapperScriptBuilder(String containerIdStr, @Override public void writeLocalWrapperScript(Path launchDst, Path pidFile, PrintStream pout) { - // TODO: exit code script for Windows - // On Windows, the pid is the container ID, so that it can also serve as // the name of the job object created by winutils for task management. // Write to temp file followed by atomic move. String normalizedPidFile = new File(pidFile.toString()).getPath(); - pout.println("@echo " + containerIdStr + " > " + normalizedPidFile + - ".tmp"); - pout.println("@move /Y " + normalizedPidFile + ".tmp " + - normalizedPidFile); - pout.println("@call " + launchDst.toString()); + String tmpNormalizedPidFile = normalizedPidFile + ".tmp"; + pout.println("@echo " + containerIdStr + " > \"" + + tmpNormalizedPidFile + "\""); + pout.println("@move /Y \"" + tmpNormalizedPidFile + "\" \"" + + normalizedPidFile + "\""); + + String normalizedLaunchDst = new File(launchDst.toString()).getPath(); + pout.println("@call \"" + normalizedLaunchDst + "\""); + + String normalizedExitCodeFile = new File(ContainerLaunch.getExitCodeFile( + pidFile.toString())).getPath(); + String tmpNormalizedExitCodeFile = normalizedExitCodeFile + ".tmp"; + pout.println("@set rc=%errorlevel%"); + pout.println("@echo %rc% > \"" + tmpNormalizedExitCodeFile + "\""); + pout.println("@move /Y \"" + tmpNormalizedExitCodeFile + "\" \"" + + normalizedExitCodeFile + "\""); + + pout.println("@exit /B %rc%"); } }