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 16c7ac7..5f77541 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 @@ -37,6 +37,7 @@ import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.service.AbstractService; import org.apache.hadoop.service.CompositeService; +import org.apache.hadoop.service.Service; import org.apache.hadoop.util.ExitUtil; import org.apache.hadoop.util.ReflectionUtils; import org.apache.hadoop.util.ShutdownHookManager; @@ -180,13 +181,10 @@ protected void serviceInit(Configuration conf) throws Exception { this.conf = conf; this.rmContext = new RMContextImpl(); - rmDispatcher = createDispatcher(); + rmDispatcher = setupDispatcher(); addIfService(rmDispatcher); rmContext.setDispatcher(rmDispatcher); - rmDispatcher.register(RMFatalEventType.class, - new ResourceManager.RMFatalEventDispatcher(this.rmContext, this)); - adminService = createAdminService(); addService(adminService); rmContext.setRMAdminService(adminService); @@ -832,6 +830,7 @@ synchronized void transitionToStandby(boolean initialize) HAServiceProtocol.HAServiceState.ACTIVE) { stopActiveServices(); if (initialize) { + resetDispatcher(); createAndInitActiveServices(); } } @@ -994,4 +993,19 @@ private static void setHttpPolicy(Configuration conf) { YarnConfiguration.YARN_HTTP_POLICY_KEY, YarnConfiguration.YARN_HTTP_POLICY_DEFAULT))); } + + private Dispatcher setupDispatcher() { + Dispatcher dispatcher = createDispatcher(); + dispatcher.register(RMFatalEventType.class, + new ResourceManager.RMFatalEventDispatcher(this.rmContext, this)); + return dispatcher; + } + + private void resetDispatcher() { + Dispatcher dispatcher = setupDispatcher(); + ((Service)dispatcher).init(this.conf); + ((Service)dispatcher).start(); + rmDispatcher = dispatcher; + rmContext.setDispatcher(rmDispatcher); + } }