YARN-3585. NodeManager cannot exit on SHUTDOWN event triggered and NM recovery is enabled. Contributed by Rohith Sharmaks

(cherry picked from commit e13b671aa5)

(cherry picked from commit 752caa95a4)
(cherry picked from commit 13c4db632b0e7f19dcfa883c2492431c2c7d0799)
This commit is contained in:
Jason Lowe 2015-06-03 19:44:07 +00:00 committed by Vinod Kumar Vavilapalli
parent a2434dcf2a
commit 193d8d3667
2 changed files with 18 additions and 2 deletions

View File

@ -153,6 +153,9 @@ Release 2.6.1 - UNRELEASED
YARN-3725. App submission via REST API is broken in secure mode due to YARN-3725. App submission via REST API is broken in secure mode due to
Timeline DT service address is empty. (Zhijie Shen via wangda) 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.6.0 - 2014-11-18 Release 2.6.0 - 2014-11-18
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -37,6 +37,7 @@ import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
import org.apache.hadoop.security.Credentials; import org.apache.hadoop.security.Credentials;
import org.apache.hadoop.security.SecurityUtil; import org.apache.hadoop.security.SecurityUtil;
import org.apache.hadoop.service.CompositeService; import org.apache.hadoop.service.CompositeService;
import org.apache.hadoop.util.ExitUtil;
import org.apache.hadoop.util.ReflectionUtils; import org.apache.hadoop.util.ReflectionUtils;
import org.apache.hadoop.util.ShutdownHookManager; import org.apache.hadoop.util.ShutdownHookManager;
import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.util.StringUtils;
@ -88,6 +89,7 @@ public class NodeManager extends CompositeService
private AtomicBoolean isStopping = new AtomicBoolean(false); private AtomicBoolean isStopping = new AtomicBoolean(false);
private boolean rmWorkPreservingRestartEnabled; private boolean rmWorkPreservingRestartEnabled;
private boolean shouldExitOnShutdownEvent = false;
public NodeManager() { public NodeManager() {
super(NodeManager.class.getName()); super(NodeManager.class.getName());
@ -287,7 +289,16 @@ public class NodeManager extends CompositeService
new Thread() { new Thread() {
@Override @Override
public void run() { public void run() {
try {
NodeManager.this.stop(); NodeManager.this.stop();
} catch (Throwable t) {
LOG.error("Error while shutting down NodeManager", t);
} finally {
if (shouldExitOnShutdownEvent
&& !ShutdownHookManager.get().isShutdownInProgress()) {
ExitUtil.terminate(-1);
}
}
} }
}.start(); }.start();
} }
@ -463,7 +474,9 @@ public class NodeManager extends CompositeService
nodeManagerShutdownHook = new CompositeServiceShutdownHook(this); nodeManagerShutdownHook = new CompositeServiceShutdownHook(this);
ShutdownHookManager.get().addShutdownHook(nodeManagerShutdownHook, ShutdownHookManager.get().addShutdownHook(nodeManagerShutdownHook,
SHUTDOWN_HOOK_PRIORITY); SHUTDOWN_HOOK_PRIORITY);
// System exit should be called only when NodeManager is instantiated from
// main() funtion
this.shouldExitOnShutdownEvent = true;
this.init(conf); this.init(conf);
this.start(); this.start();
} catch (Throwable t) { } catch (Throwable t) {