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 3e5f138..2e81d77 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 @@ -1210,9 +1210,14 @@ private void resetDispatcher() { ((Service)dispatcher).init(this.conf); ((Service)dispatcher).start(); removeService((Service)rmDispatcher); + // Need to stop previous rmDispatcher before assigning new dispatcher // otherwise causes "AsyncDispatcher event handler" thread leak - ((Service) rmDispatcher).stop(); + Thread dispatcherShutdownThread = + new Thread(new DispatcherShutdownThread(rmDispatcher)); + dispatcherShutdownThread.setName("DispatcherShutdown Handler"); + dispatcherShutdownThread.start(); + rmDispatcher = dispatcher; addIfService(rmDispatcher); rmContext.setDispatcher(rmDispatcher); @@ -1257,4 +1262,17 @@ private static void deleteRMStateStore(Configuration conf) throws Exception { rmStore.stop(); } } + + private static class DispatcherShutdownThread implements Runnable { + Dispatcher rmDispatcher; + + DispatcherShutdownThread(Dispatcher dispatcher) { + rmDispatcher = dispatcher; + } + + @Override + public void run() { + ((Service) rmDispatcher).stop(); + } + } }