Repository: hadoop Updated Branches: refs/heads/trunk dbc4f6493 -> e13b671aa
YARN-3585. NodeManager cannot exit on SHUTDOWN event triggered and NM recovery is enabled. Contributed by Rohith Sharmaks Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/e13b671a Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/e13b671a Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/e13b671a Branch: refs/heads/trunk Commit: e13b671aa510f553f4a6a232b4694b6a4cce88ae Parents: dbc4f64 Author: Jason Lowe <jl...@apache.org> Authored: Wed Jun 3 19:44:07 2015 +0000 Committer: Jason Lowe <jl...@apache.org> Committed: Wed Jun 3 19:44:07 2015 +0000 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 +++ .../yarn/server/nodemanager/NodeManager.java | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/e13b671a/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index c5ba58c..64f6abb 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -615,6 +615,9 @@ Release 2.7.1 - UNRELEASED YARN-3725. App submission via REST API is broken in secure mode due to Timeline DT service address is empty. (Zhijie Shen via wangda) + YARN-3585. NodeManager cannot exit on SHUTDOWN event triggered and NM + recovery is enabled (Rohith Sharmaks via jlowe) + Release 2.7.0 - 2015-04-20 INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/e13b671a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java index 03e17c8..185ba12 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java @@ -38,6 +38,7 @@ import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import org.apache.hadoop.security.Credentials; import org.apache.hadoop.security.SecurityUtil; import org.apache.hadoop.service.CompositeService; +import org.apache.hadoop.util.ExitUtil; import org.apache.hadoop.util.GenericOptionsParser; import org.apache.hadoop.util.NodeHealthScriptRunner; import org.apache.hadoop.util.ReflectionUtils; @@ -94,6 +95,7 @@ public class NodeManager extends CompositeService private AtomicBoolean isStopping = new AtomicBoolean(false); private boolean rmWorkPreservingRestartEnabled; + private boolean shouldExitOnShutdownEvent = false; public NodeManager() { super(NodeManager.class.getName()); @@ -344,7 +346,16 @@ public class NodeManager extends CompositeService new Thread() { @Override public void run() { - NodeManager.this.stop(); + try { + NodeManager.this.stop(); + } catch (Throwable t) { + LOG.error("Error while shutting down NodeManager", t); + } finally { + if (shouldExitOnShutdownEvent + && !ShutdownHookManager.get().isShutdownInProgress()) { + ExitUtil.terminate(-1); + } + } } }.start(); } @@ -530,7 +541,9 @@ public class NodeManager extends CompositeService nodeManagerShutdownHook = new CompositeServiceShutdownHook(this); ShutdownHookManager.get().addShutdownHook(nodeManagerShutdownHook, SHUTDOWN_HOOK_PRIORITY); - + // System exit should be called only when NodeManager is instantiated from + // main() funtion + this.shouldExitOnShutdownEvent = true; this.init(conf); this.start(); } catch (Throwable t) {