From 391ae8077d423ae3f6b3b1d3e19fdf5adf2fb5d3 Mon Sep 17 00:00:00 2001 From: g00227695 Date: Wed, 27 May 2015 20:24:24 +0800 Subject: [PATCH 1/3] YARN-3678: add process check before kill it --- .../server/nodemanager/ContainerExecutor.java | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java index 1c670a16ae9de..57b1376b21fc0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java @@ -47,6 +47,7 @@ import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerDiagnosticsUpdateEvent; import org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch; import org.apache.hadoop.yarn.server.nodemanager.util.ProcessIdFileReader; +import org.apache.hadoop.yarn.util.ConverterUtils; import org.apache.hadoop.util.Shell; import org.apache.hadoop.util.StringUtils; @@ -486,7 +487,16 @@ public DelayedProcessKiller(Container container, String user, String pid, public void run() { try { Thread.sleep(delay); - containerExecutor.signalContainer(user, pid, signal); + ContainerId containerId = container.getContainerId(); + String containerIdStr = ConverterUtils.toString(containerId); + if(null != containerIdStr && shouldDoSignal(containerIdStr, pid)) + { + containerExecutor.signalContainer(user, pid, signal); + } + else + { + LOG.info("should not do kill, other process uses this pid"); + } } catch (InterruptedException e) { return; } catch (IOException e) { @@ -497,5 +507,33 @@ public void run() { .getContainerId(), message)); } } + + + private boolean shouldDoSignal(String containerIdStr, String processId) + { + + try { + + LOG.debug("here will do ps for " + containerIdStr); + + String ret = Shell.execCommand("/bin/sh", "-c", "ps -ef | grep " + processId); + + LOG.debug(ret); + + boolean match = ret.contains(containerIdStr); + + LOG.debug("match " + match); + + return match; + + } catch (IOException e) { + + LOG.warn("not able to execute command /bin/sh -c 'ps'" ); + + } + + return false; + + } } } From bc608b2121ce4655d78eb540cae77e2349e26cc3 Mon Sep 17 00:00:00 2001 From: g00227695 Date: Thu, 28 May 2015 09:31:43 +0800 Subject: [PATCH 2/3] YARN-3678: code style correction --- .../server/nodemanager/ContainerExecutor.java | 48 +++++++------------ 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java index 57b1376b21fc0..6ca5b3238461a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java @@ -489,13 +489,8 @@ public void run() { Thread.sleep(delay); ContainerId containerId = container.getContainerId(); String containerIdStr = ConverterUtils.toString(containerId); - if(null != containerIdStr && shouldDoSignal(containerIdStr, pid)) - { - containerExecutor.signalContainer(user, pid, signal); - } - else - { - LOG.info("should not do kill, other process uses this pid"); + if(null != containerIdStr && shouldDoSignal(containerIdStr, pid)){ + containerExecutor.signalContainer(user, pid, signal); } } catch (InterruptedException e) { return; @@ -508,32 +503,25 @@ public void run() { } } - + /** + * to check if the process is the container process + * @param containerIdStr + * @param processId + * @return + */ private boolean shouldDoSignal(String containerIdStr, String processId) { - - try { - - LOG.debug("here will do ps for " + containerIdStr); - - String ret = Shell.execCommand("/bin/sh", "-c", "ps -ef | grep " + processId); - - LOG.debug(ret); - - boolean match = ret.contains(containerIdStr); - - LOG.debug("match " + match); - - return match; - - } catch (IOException e) { - + try { + LOG.debug("here will do ps for " + containerIdStr); + String ret = Shell.execCommand("/bin/sh", "-c", "ps -ef | grep " + processId); + LOG.debug(ret); + boolean match = ret.contains(containerIdStr); + LOG.debug("match " + match); + return match; + } catch (IOException e) { LOG.warn("not able to execute command /bin/sh -c 'ps'" ); - - } - - return false; - + } + return false; } } } From 3a929fc5901b1b9cede9cd82ef863212361571fe Mon Sep 17 00:00:00 2001 From: Guchige Date: Thu, 28 May 2015 09:56:52 +0800 Subject: [PATCH 3/3] Update ContainerExecutor.java still style correction --- .../yarn/server/nodemanager/ContainerExecutor.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java index 6ca5b3238461a..49c94370cd22f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java @@ -512,14 +512,14 @@ public void run() { private boolean shouldDoSignal(String containerIdStr, String processId) { try { - LOG.debug("here will do ps for " + containerIdStr); - String ret = Shell.execCommand("/bin/sh", "-c", "ps -ef | grep " + processId); - LOG.debug(ret); - boolean match = ret.contains(containerIdStr); - LOG.debug("match " + match); - return match; + LOG.debug("here will do ps for " + containerIdStr); + String ret = Shell.execCommand("/bin/sh", "-c", "ps -ef | grep " + processId); + LOG.debug(ret); + boolean match = ret.contains(containerIdStr); + LOG.debug("match " + match); + return match; } catch (IOException e) { - LOG.warn("not able to execute command /bin/sh -c 'ps'" ); + LOG.warn("not able to execute command /bin/sh -c 'ps'" ); } return false; }