diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/AdminService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/AdminService.java index e5bb6e5..dac2a30 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/AdminService.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/AdminService.java @@ -23,6 +23,7 @@ import java.net.InetSocketAddress; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -101,7 +102,7 @@ private boolean autoFailoverEnabled; private EmbeddedElectorService embeddedElector; - + private AtomicBoolean reinitialize = new AtomicBoolean(false); private Server server; // Address to use for binding. May be a wildcard address. @@ -309,15 +310,27 @@ public synchronized void transitionToActive( UserGroupInformation user = checkAccess("transitionToActive"); checkHaStateChange(reqInfo); try { - rm.transitionToActive(); + rm.transitionToActive(reinitialize.get()); + reinitialize.set(false); // call all refresh*s for active RM to get the updated configurations. refreshAll(); - RMAuditLogger.logSuccess(user.getShortUserName(), - "transitionToActive", "RMHAProtocolService"); + RMAuditLogger.logSuccess(user.getShortUserName(), "transitionToActive", + "RMHAProtocolService"); } catch (Exception e) { RMAuditLogger.logFailure(user.getShortUserName(), "transitionToActive", - "", "RMHAProtocolService", - "Exception transitioning to active"); + "", "RMHAProtocolService", "Exception transitioning to active"); + if (rmContext.getHAServiceState() + == HAServiceProtocol.HAServiceState.ACTIVE) { + try { + rm.transitionToStandby(false); + rm.reinitialize(true); + reinitialize.set(false); + } catch (Exception re) { + reinitialize.set(true); + throw new ServiceFailedException( + "Exception in state transistion", re); + } + } throw new ServiceFailedException( "Error when transitioning to Active mode", e); } 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 1b606b4..a56b661 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 @@ -990,12 +990,14 @@ protected boolean areActiveServicesRunning() { return activeServices != null && activeServices.isInState(STATE.STARTED); } - synchronized void transitionToActive() throws Exception { + synchronized void transitionToActive(boolean reinit) throws Exception { if (rmContext.getHAServiceState() == HAServiceProtocol.HAServiceState.ACTIVE) { LOG.info("Already in active state"); return; } - + if (reinit) { + reinitialize(true); + } LOG.info("Transitioning to active state"); this.rmLoginUGI.doAs(new PrivilegedExceptionAction() { @@ -1038,7 +1040,7 @@ protected void serviceStart() throws Exception { if (this.rmContext.isHAEnabled()) { transitionToStandby(true); } else { - transitionToActive(); + transitionToActive(false); } startWepApp();