private static void verifyAndSetCurrentRMHAId(Configuration conf) { String rmId = getRMHAId(conf); if (rmId == null) { StringBuilder msg = new StringBuilder(); msg.append("Can not find valid RM_HA_ID. None of "); for (String id : conf .getTrimmedStringCollection(YarnConfiguration.RM_HA_IDS)) { msg.append(addSuffix(YarnConfiguration.RM_ADDRESS, id)).append(" "); } msg.append(" are matching" + " the local address OR " + YarnConfiguration.RM_HA_ID + " is not" + " specified in HA Configuration"); throwBadConfigurationException(msg.toString()); } else { Collection<String> ids = getRMHAIds(conf); if (!ids.contains(rmId)) { throwBadConfigurationException( getRMHAIdNeedToBeIncludedMessage(ids.toString(), rmId)); } } conf.set(YarnConfiguration.RM_HA_ID, rmId); }
@InterfaceAudience.Private @VisibleForTesting static String getConfKeyForRMInstance(String prefix, Configuration conf) { if (!YarnConfiguration.getServiceAddressConfKeys(conf).contains(prefix)) { return prefix; } else { String RMId = getRMHAId(conf); checkAndSetRMRPCAddress(prefix, RMId, conf); return addSuffix(prefix, RMId); } }
private static void verifyAndSetCurrentRMHAId(Configuration conf) { String rmId = getRMHAId(conf); if (rmId == null) { StringBuilder msg = new StringBuilder(); msg.append("Can not find valid RM_HA_ID. None of "); for (String id : conf .getTrimmedStringCollection(YarnConfiguration.RM_HA_IDS)) { msg.append(addSuffix(YarnConfiguration.RM_ADDRESS, id) + " "); } msg.append(" are matching" + " the local address OR " + YarnConfiguration.RM_HA_ID + " is not" + " specified in HA Configuration"); throwBadConfigurationException(msg.toString()); } else { Collection<String> ids = getRMHAIds(conf); if (!ids.contains(rmId)) { throwBadConfigurationException( getRMHAIdNeedToBeIncludedMessage(ids.toString(), rmId)); } } conf.set(YarnConfiguration.RM_HA_ID, rmId); }
@InterfaceAudience.Private @VisibleForTesting static String getConfKeyForRMInstance(String prefix, Configuration conf) { if (!YarnConfiguration.getServiceAddressConfKeys(conf).contains(prefix)) { return prefix; } else { String RMId = getRMHAId(conf); checkAndSetRMRPCAddress(prefix, RMId, conf); return addSuffix(prefix, RMId); } }
@InterfaceAudience.Private @VisibleForTesting static String getConfKeyForRMInstance(String prefix, Configuration conf) { if (!YarnConfiguration.getServiceAddressConfKeys(conf).contains(prefix)) { return prefix; } else { String RMId = getRMHAId(conf); checkAndSetRMRPCAddress(prefix, RMId, conf); return addSuffix(prefix, RMId); } }
@InterfaceAudience.Private @VisibleForTesting static String getConfKeyForRMInstance(String prefix, Configuration conf) { if (!YarnConfiguration.getServiceAddressConfKeys(conf).contains(prefix)) { return prefix; } else { String RMId = getRMHAId(conf); checkAndSetRMRPCAddress(prefix, RMId, conf); return addSuffix(prefix, RMId); } }
@Override public InetSocketAddress updateConnectAddr(String name, InetSocketAddress addr) { String prefix = name; if (HAUtil.isHAEnabled(this) && getServiceAddressConfKeys(this).contains(name)) { prefix = HAUtil.addSuffix(prefix, HAUtil.getRMHAId(this)); } return super.updateConnectAddr(prefix, addr); }
@Override protected void serviceInit(Configuration conf) throws Exception { rmId = HAUtil.getRMHAId(conf); String clusterId = YarnConfiguration.getClusterId(conf); String zkBasePath = conf.get( YarnConfiguration.AUTO_FAILOVER_ZK_BASE_PATH, YarnConfiguration.DEFAULT_AUTO_FAILOVER_ZK_BASE_PATH); latchPath = zkBasePath + "/" + clusterId; curator = rm.getCurator(); initAndStartLeaderLatch(); super.serviceInit(conf); }
@Override public InetSocketAddress updateConnectAddr(String name, InetSocketAddress addr) { String prefix = name; if (HAUtil.isHAEnabled(this) && getServiceAddressConfKeys(this).contains(name)) { prefix = HAUtil.addSuffix(prefix, HAUtil.getRMHAId(this)); } return super.updateConnectAddr(prefix, addr); }
@Override public InetSocketAddress updateConnectAddr(String name, InetSocketAddress addr) { String prefix = name; if (HAUtil.isHAEnabled(this)) { prefix = HAUtil.addSuffix(prefix, HAUtil.getRMHAId(this)); } return super.updateConnectAddr(prefix, addr); }
@Override public InetSocketAddress updateConnectAddr(String name, InetSocketAddress addr) { String prefix = name; if (HAUtil.isHAEnabled(this)) { prefix = HAUtil.addSuffix(prefix, HAUtil.getRMHAId(this)); } return super.updateConnectAddr(prefix, addr); }
@SuppressWarnings("unchecked") protected T createRetriableProxy() { try { // Create proxy that can retry exceptions properly. RetryPolicy retryPolicy = RMProxy.createRetryPolicy(conf, false); InetSocketAddress rmAddress = rmProxy.getRMAddress(conf, protocol); T proxy = rmProxy.getProxy(conf, protocol, rmAddress); return (T) RetryProxy.create(protocol, proxy, retryPolicy); } catch (IOException ioe) { LOG.error("Unable to create proxy to the ResourceManager " + HAUtil.getRMHAId(conf), ioe); return null; } }
@Override @SuppressWarnings("unchecked") public void init(Configuration configuration, RMProxy<T> rmProxy, Class<T> protocol) { super.init(configuration, rmProxy, protocol); Map<String, ProxyInfo<T>> retriableProxies = new HashMap<>(); String originalId = HAUtil.getRMHAId(conf); for (String rmId : rmServiceIds) { conf.set(YarnConfiguration.RM_HA_ID, rmId); nonRetriableProxy.put(rmId, super.getProxyInternal()); T proxy = createRetriableProxy(); ProxyInfo<T> pInfo = new ProxyInfo<T>(proxy, rmId); retriableProxies.put(rmId, pInfo); } conf.set(YarnConfiguration.RM_HA_ID, originalId); T proxyInstance = (T) Proxy.newProxyInstance( RMRequestHedgingInvocationHandler.class.getClassLoader(), new Class<?>[] {protocol}, new RMRequestHedgingInvocationHandler(retriableProxies)); String combinedInfo = Arrays.toString(rmServiceIds); wrappedProxy = new ProxyInfo<T>(proxyInstance, combinedInfo); LOG.info("Created wrapped proxy for " + combinedInfo); }
@Test public void testGetRMId() throws Exception { conf.set(YarnConfiguration.RM_HA_ID, RM1_NODE_ID); assertEquals("Does not honor " + YarnConfiguration.RM_HA_ID, RM1_NODE_ID, HAUtil.getRMHAId(conf)); conf.clear(); assertNull("Return null when " + YarnConfiguration.RM_HA_ID + " is not set", HAUtil.getRMHAId(conf)); }
@Test public void testGetRMId() throws Exception { conf.set(YarnConfiguration.RM_HA_ID, RM1_NODE_ID); assertEquals("Does not honor " + YarnConfiguration.RM_HA_ID, RM1_NODE_ID, HAUtil.getRMHAId(conf)); conf.clear(); assertNull("Return null when " + YarnConfiguration.RM_HA_ID + " is not set", HAUtil.getRMHAId(conf)); }
@Test public void testGetRMId() throws Exception { conf.set(YarnConfiguration.RM_HA_ID, RM1_NODE_ID); assertEquals("Does not honor " + YarnConfiguration.RM_HA_ID, RM1_NODE_ID, HAUtil.getRMHAId(conf)); conf.clear(); assertNull("Return null when " + YarnConfiguration.RM_HA_ID + " is not set", HAUtil.getRMHAId(conf)); }
@Test public void testGetConfKeyForRMInstance() { assertTrue("RM instance id is not suffixed", HAUtil.getConfKeyForRMInstance(YarnConfiguration.RM_ADDRESS, conf) .contains(HAUtil.getRMHAId(conf))); assertFalse("RM instance id is suffixed", HAUtil.getConfKeyForRMInstance(YarnConfiguration.NM_ADDRESS, conf) .contains(HAUtil.getRMHAId(conf))); } }
@Test public void testGetConfKeyForRMInstance() { assertTrue("RM instance id is not suffixed", HAUtil.getConfKeyForRMInstance(YarnConfiguration.RM_ADDRESS, conf) .contains(HAUtil.getRMHAId(conf))); assertFalse("RM instance id is suffixed", HAUtil.getConfKeyForRMInstance(YarnConfiguration.NM_ADDRESS, conf) .contains(HAUtil.getRMHAId(conf))); } }
@Test public void testGetConfKeyForRMInstance() { assertTrue("RM instance id is not suffixed", HAUtil.getConfKeyForRMInstance(YarnConfiguration.RM_ADDRESS, conf) .contains(HAUtil.getRMHAId(conf))); assertFalse("RM instance id is suffixed", HAUtil.getConfKeyForRMInstance(YarnConfiguration.NM_ADDRESS, conf) .contains(HAUtil.getRMHAId(conf))); } }
private static void verifyAndSetConfValue(String prefix, Configuration conf) { String confKey = null; String confValue = null; try { confKey = getConfKeyForRMInstance(prefix, conf); confValue = getConfValueForRMInstance(prefix, conf); conf.set(prefix, confValue); } catch (YarnRuntimeException yre) { // Error at getRMHAId() throw yre; } catch (IllegalArgumentException iae) { String errmsg; if (confKey == null) { // Error at addSuffix errmsg = getInvalidValueMessage(YarnConfiguration.RM_HA_ID, getRMHAId(conf)); } else { // Error at Configuration#set. errmsg = getNeedToSetValueMessage(confKey); } throwBadConfigurationException(errmsg); } }