diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestRMFailover.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestRMFailover.java index 0634cc3..5efd23d 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestRMFailover.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestRMFailover.java @@ -193,7 +193,7 @@ public void testAutomaticFailover() // so it transitions to standby. ResourceManager rm = cluster.getResourceManager( cluster.getActiveRMIndex()); - rm.handleTransitionToStandBy(); + rm.transitionToStandby(); int maxWaitingAttempts = 2000; while (maxWaitingAttempts-- > 0 ) { if (rm.getRMContext().getHAServiceState() == HAServiceState.STANDBY) { 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 d79de58..beb1c8d 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 @@ -313,7 +313,7 @@ public synchronized void transitionToStandby( UserGroupInformation user = checkAccess("transitionToStandby"); checkHaStateChange(reqInfo); try { - rm.transitionToStandby(true); + rm.transitionToStandby(); RMAuditLogger.logSuccess(user.getShortUserName(), "transitionToStandby", "RMHAProtocolService"); } catch (Exception e) { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/EmbeddedElectorService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/EmbeddedElectorService.java index c7b7768..77af18d 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/EmbeddedElectorService.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/EmbeddedElectorService.java @@ -150,8 +150,8 @@ public void enterNeutralMode() { @SuppressWarnings(value = "unchecked") @Override public void notifyFatalError(String errorMessage) { - rmContext.getDispatcher().getEventHandler().handle( - new RMFatalEvent(RMFatalEventType.EMBEDDED_ELECTOR_FAILED, errorMessage)); + LOG.fatal("Error in embedded elector."); + rmContext.getResourceManager().shutdown(errorMessage); } @Override diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContext.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContext.java index ecf6166..e4a8ff8 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContext.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContext.java @@ -21,6 +21,7 @@ import java.nio.ByteBuffer; import java.util.concurrent.ConcurrentMap; +import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState; import org.apache.hadoop.yarn.api.records.ApplicationId; @@ -47,6 +48,7 @@ /** * Context of the ResourceManager. */ +@InterfaceAudience.Private public interface RMContext { Dispatcher getDispatcher(); @@ -55,6 +57,8 @@ HAServiceState getHAServiceState(); + ResourceManager getResourceManager(); + RMStateStore getStateStore(); ConcurrentMap getRMApps(); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContextImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContextImpl.java index ebf2fe4..0e34293 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContextImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContextImpl.java @@ -29,6 +29,7 @@ import org.apache.hadoop.yarn.LocalConfigurationProvider; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.NodeId; +import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.conf.ConfigurationProvider; import org.apache.hadoop.yarn.event.Dispatcher; import org.apache.hadoop.yarn.server.resourcemanager.ahs.RMApplicationHistoryWriter; @@ -60,6 +61,8 @@ private HAServiceState haServiceState = HAServiceProtocol.HAServiceState.INITIALIZING; + private ResourceManager resourceManager; + private AdminService adminService; private ConfigurationProvider configurationProvider; @@ -311,6 +314,15 @@ public HAServiceState getHAServiceState() { } } + @Override + public ResourceManager getResourceManager() { + return resourceManager; + } + + public void setResourceManager(ResourceManager rm) { + this.resourceManager = rm; + } + public void setWorkPreservingRecoveryEnabled(boolean enabled) { activeServiceContext.setWorkPreservingRecoveryEnabled(enabled); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMFatalEvent.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMFatalEvent.java deleted file mode 100644 index 59e6236..0000000 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMFatalEvent.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.hadoop.yarn.server.resourcemanager; - -import org.apache.hadoop.util.StringUtils; -import org.apache.hadoop.yarn.event.AbstractEvent; - -public class RMFatalEvent extends AbstractEvent { - private String cause; - - public RMFatalEvent(RMFatalEventType rmFatalEventType, String cause) { - super(rmFatalEventType); - this.cause = cause; - } - - public RMFatalEvent(RMFatalEventType rmFatalEventType, Exception cause) { - super(rmFatalEventType); - this.cause = StringUtils.stringifyException(cause); - } - - public String getCause() {return this.cause;} -} diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMFatalEventType.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMFatalEventType.java deleted file mode 100644 index 789c018..0000000 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMFatalEventType.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hadoop.yarn.server.resourcemanager; - -import org.apache.hadoop.classification.InterfaceAudience; - -@InterfaceAudience.Private -public enum RMFatalEventType { - // Source <- Store - STATE_STORE_OP_FAILED, - - // Source <- Embedded Elector - EMBEDDED_ELECTOR_FAILED -} 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 cceee2b..4e39e2a 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 @@ -187,6 +187,7 @@ protected static void setClusterTimeStamp(long timestamp) { protected void serviceInit(Configuration conf) throws Exception { this.conf = conf; this.rmContext = new RMContextImpl(); + rmContext.setResourceManager(this); this.configurationProvider = ConfigurationProviderFactory.getConfigurationProvider(conf); @@ -731,20 +732,7 @@ public void handle(SchedulerEvent event) { } @Private - public static class RMFatalEventDispatcher - implements EventHandler { - - @Override - public void handle(RMFatalEvent event) { - LOG.fatal("Received a " + RMFatalEvent.class.getName() + " of type " + - event.getType().name() + ". Cause:\n" + event.getCause()); - - ExitUtil.terminate(1, event.getCause()); - } - } - - public void handleTransitionToStandBy() { - if (rmContext.isHAEnabled()) { + public void transitionToStandby() { try { // Transition to standby and reinit active services LOG.info("Transitioning RM to Standby mode"); @@ -753,9 +741,16 @@ public void handleTransitionToStandBy() { return; } catch (Exception e) { LOG.fatal("Failed to transition RM to Standby mode."); - ExitUtil.terminate(1, e); + shutdown(e); } - } + } + + public void shutdown(Throwable t) { + ExitUtil.terminate(1, t); + } + + public void shutdown(String errorMessage) { + ExitUtil.terminate(1, errorMessage); } @Private @@ -1046,7 +1041,7 @@ public Void run() throws Exception { LOG.info("Transitioned to active state"); } - synchronized void transitionToStandby(boolean initialize) + private synchronized void transitionToStandby(boolean initialize) throws Exception { if (rmContext.getHAServiceState() == HAServiceProtocol.HAServiceState.STANDBY) { @@ -1217,8 +1212,8 @@ public static void main(String argv[]) { */ private Dispatcher setupDispatcher() { Dispatcher dispatcher = createDispatcher(); - dispatcher.register(RMFatalEventType.class, - new ResourceManager.RMFatalEventDispatcher()); +// dispatcher.register(RMFatalEventType.class, +// new ResourceManager.RMFatalEventDispatcher()); return dispatcher; } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/RMStateStore.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/RMStateStore.java index 3966dc4..be82c7a 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/RMStateStore.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/RMStateStore.java @@ -49,8 +49,6 @@ import org.apache.hadoop.yarn.event.EventHandler; import org.apache.hadoop.yarn.security.client.RMDelegationTokenIdentifier; import org.apache.hadoop.yarn.server.records.Version; -import org.apache.hadoop.yarn.server.resourcemanager.RMFatalEvent; -import org.apache.hadoop.yarn.server.resourcemanager.RMFatalEventType; import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager; import org.apache.hadoop.yarn.server.resourcemanager.recovery.records.AMRMTokenSecretManagerState; import org.apache.hadoop.yarn.server.resourcemanager.recovery.records.ApplicationAttemptStateData; @@ -861,13 +859,15 @@ protected void handleStoreEvent(RMStateStoreEvent event) { protected void notifyStoreOperationFailed(Exception failureCause) { if (failureCause instanceof StoreFencedException) { updateFencedState(); - Thread standByTransitionThread = - new Thread(new StandByTransitionThread()); - standByTransitionThread.setName("StandByTransitionThread Handler"); - standByTransitionThread.start(); + new Thread() { + @Override + public void run() { + resourceManager.transitionToStandby(); + } + }.start(); + } else { - rmDispatcher.getEventHandler().handle( - new RMFatalEvent(RMFatalEventType.STATE_STORE_OP_FAILED, failureCause)); + resourceManager.shutdown(failureCause); } } @@ -915,14 +915,6 @@ public void setResourceManager(ResourceManager rm) { this.resourceManager = rm; } - private class StandByTransitionThread implements Runnable { - @Override - public void run() { - LOG.info("RMStateStore has been fenced"); - resourceManager.handleTransitionToStandBy(); - } - } - public RMStateStoreState getRMStateStoreState() { this.readLock.lock(); try { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java index 0200e85..d836bb8 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java @@ -496,9 +496,7 @@ void stopActiveServices() throws Exception { @Override public void run() { try { - rm.transitionToStandby(true); - } catch (IOException e) { - e.printStackTrace(); + rm.transitionToStandby(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace();