diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java index 913b8ed..aafd510 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java @@ -32,6 +32,7 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.service.AbstractService; import org.apache.hadoop.util.ShutdownHookManager; +import org.apache.hadoop.yarn.YarnUncaughtExceptionHandler; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; @@ -73,6 +74,7 @@ private Thread eventHandlingThread; protected final Map, EventHandler> eventDispatchers; private boolean exitOnDispatchException; + YarnUncaughtExceptionHandler yarnUncaughtExceptionHandler; /** * The thread name for dispatcher. @@ -145,9 +147,18 @@ protected void serviceStart() throws Exception { super.serviceStart(); eventHandlingThread = new Thread(createThread()); eventHandlingThread.setName(dispatcherThreadName); + if (yarnUncaughtExceptionHandler != null) { + eventHandlingThread.setUncaughtExceptionHandler( + yarnUncaughtExceptionHandler); + } eventHandlingThread.start(); } + public void setYarnUncaughtExceptionhandler( + YarnUncaughtExceptionHandler handler) { + yarnUncaughtExceptionHandler = handler; + } + public void setDrainEventsOnStop() { drainEventsOnStop = true; } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMCriticalThreadUncaughtExceptionHandler.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMCriticalThreadUncaughtExceptionHandler.java index a67f81a..2648438 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMCriticalThreadUncaughtExceptionHandler.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMCriticalThreadUncaughtExceptionHandler.java @@ -18,11 +18,10 @@ package org.apache.hadoop.yarn.server.resourcemanager; -import java.lang.Thread.UncaughtExceptionHandler; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.yarn.YarnUncaughtExceptionHandler; import org.apache.hadoop.yarn.conf.HAUtil; /** @@ -33,8 +32,8 @@ * in the thread entry point or after creation of threads. */ @Private -public class RMCriticalThreadUncaughtExceptionHandler - implements UncaughtExceptionHandler { +public class RMCriticalThreadUncaughtExceptionHandler extends + YarnUncaughtExceptionHandler { private static final Log LOG = LogFactory.getLog( RMCriticalThreadUncaughtExceptionHandler.class); private final RMContext rmContext; diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java index b62315e..4b9d63f 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java @@ -424,7 +424,10 @@ protected void setRMStateStore(RMStateStore rmStore) { } protected Dispatcher createDispatcher() { - return new AsyncDispatcher("RM Event dispatcher"); + AsyncDispatcher dispatcher = new AsyncDispatcher("RM Event dispatcher"); + dispatcher.setYarnUncaughtExceptionhandler( + new RMCriticalThreadUncaughtExceptionHandler(rmContext)); + return dispatcher; } protected ResourceScheduler createScheduler() {