String instanceName = incomingInstanceConfig.getInstanceName(); if (previousInstanceConfig.getRecord().getVersion() == currentInstanceConfig.getRecord().getVersion()) { continue; boolean wasEnabled = previousInstanceConfig.getInstanceEnabled(); boolean isEnabled = currentInstanceConfig.getInstanceEnabled(); previousInstanceConfig.getRecord().getSimpleField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS); String isShuttingDown = currentInstanceConfig.getRecord().getSimpleField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS);
public InstanceConfig toInstanceConfig() { final InstanceConfig iConfig = new InstanceConfig(toInstanceId()); iConfig.setHostName(_host); iConfig.setPort(_port); iConfig.setInstanceEnabled(true); iConfig.addTag(getTagOrDefaultTag()); return iConfig; }
public static Instance fromInstanceConfig(InstanceConfig instanceConfig) { InstanceConfig ic = instanceConfig; String instanceName = ic.getInstanceName(); String type; if (instanceName.startsWith(CommonConstants.Helix.PREFIX_OF_SERVER_INSTANCE)) { type = CommonConstants.Helix.SERVER_INSTANCE_TYPE; } else if (instanceName.startsWith(CommonConstants.Helix.PREFIX_OF_BROKER_INSTANCE)) { type = CommonConstants.Helix.BROKER_INSTANCE_TYPE; } else { throw new RuntimeException("Unknown instance type for: " + instanceName); } Instance instance = new Instance(ic.getHostName(), ic.getPort(), type, org.apache.commons.lang.StringUtils.join(ic.getTags(), ',')); return instance; }
/** * Returns the enabled instances in the cluster with the given tag. * * TODO: refactor code to use this method over {@link #getEnabledInstancesWithTag(HelixManager, String)} if applicable * to reuse instance configs in order to reduce ZK accesses */ public static List<String> getEnabledInstancesWithTag(List<InstanceConfig> instanceConfigs, String tag) { List<String> enabledInstancesWithTag = new ArrayList<>(); for (InstanceConfig instanceConfig : instanceConfigs) { if (instanceConfig.getInstanceEnabled() && instanceConfig.containsTag(tag)) { enabledInstancesWithTag.add(instanceConfig.getInstanceName()); } } return enabledInstancesWithTag; }
/** * Returns the instances in the cluster with the given tag. * * TODO: refactor code to use this method over {@link #getInstancesWithTag(HelixManager, String)} if applicable to * reuse instance configs in order to reduce ZK accesses */ public static List<String> getInstancesWithTag(List<InstanceConfig> instanceConfigs, String tag) { List<String> instancesWithTag = new ArrayList<>(); for (InstanceConfig instanceConfig : instanceConfigs) { if (instanceConfig.containsTag(tag)) { instancesWithTag.add(instanceConfig.getInstanceName()); } } return instancesWithTag; }
@Override public ZNRecord update(ZNRecord currentData) { if (currentData == null) { throw new HelixException("Cluster: " + clusterName + ", instance: " + instanceName + ", participant config is null"); } InstanceConfig config = new InstanceConfig(currentData); config.setInstanceEnabled(enabled); return config.getRecord(); } }, AccessOption.PERSISTENT);
private static InstanceConfig getInstanceCfg(ParticipantConfig participant) { if (participant == null || participant.name == null || participant.host == null || participant.port == null) { throw new HelixException("Participant must have a specified name, host, and port!"); } InstanceConfig instanceCfg = new InstanceConfig(participant.name); instanceCfg.setHostName(participant.host); instanceCfg.setPort(participant.port.toString()); return instanceCfg; }
InstanceConfig instanceConfig = new InstanceConfig("Server_localhost_1234"); instanceConfigs.add(instanceConfig); instanceConfig.getRecord().setSimpleField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS, "false");
InstanceConfig config = new InstanceConfig("consumer_" + consumerId); config.setHostName("localhost"); config.setInstanceEnabled(true); admin.addInstance(clusterName, config);
/** * Returns the config for all the Helix instances in the cluster. */ public List<InstanceConfig> getAllHelixInstanceConfigs() { List<ZNRecord> znRecords = _cacheInstanceConfigsDataAccessor.getChildren("/", null, AccessOption.PERSISTENT); List<InstanceConfig> instanceConfigs = new ArrayList<>(znRecords.size()); znRecords.forEach(znRecord -> instanceConfigs.add(new InstanceConfig(znRecord))); return instanceConfigs; }
serverInfo.state = (liveInstances.contains(server)) ? "ONLINE" : "OFFLINE"; InstanceConfig config = zkHelixAdmin.getInstanceConfig(_clusterName, server); serverInfo.tags = config.getRecord().getListField("TAG_LIST"); clusterInfo.addServerInfo(serverInfo); brokerInfo.state = (liveInstances.contains(server)) ? "ONLINE" : "OFFLINE"; InstanceConfig config = zkHelixAdmin.getInstanceConfig(_clusterName, server); brokerInfo.tags = config.getRecord().getListField("TAG_LIST"); clusterInfo.addBrokerInfo(brokerInfo);
@Test public void testRoutingTableExcludesDisabledAndRebootingInstances() { final String tableName = "fakeTable_OFFLINE"; final int segmentCount = 100; final int replicationFactor = 6; final int instanceCount = 50; ExternalView externalView = createExternalView(tableName, segmentCount, replicationFactor, instanceCount); List<InstanceConfig> instanceConfigs = createInstanceConfigs(instanceCount); final InstanceConfig disabledHelixInstance = instanceConfigs.get(0); final String disabledHelixInstanceName = disabledHelixInstance.getInstanceName(); disabledHelixInstance.setInstanceEnabled(false); final InstanceConfig shuttingDownInstance = instanceConfigs.get(1); final String shuttingDownInstanceName = shuttingDownInstance.getInstanceName(); shuttingDownInstance.getRecord() .setSimpleField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS, Boolean.toString(true)); validateAssertionForOneRoutingTable(new RoutingTableValidator() { @Override public boolean isRoutingTableValid(Map<String, List<String>> routingTable, ExternalView externalView, List<InstanceConfig> instanceConfigs) { for (String serverName : routingTable.keySet()) { // These servers should not appear in the routing table if (serverName.equals(disabledHelixInstanceName) || serverName.equals(shuttingDownInstanceName)) { return false; } } return true; } }, "Routing table should not contain disabled instances", externalView, instanceConfigs, tableName); }
public RoutingTableInstancePruner(List<InstanceConfig> instanceConfigs) { for (InstanceConfig instanceConfig : instanceConfigs) { _instanceConfigMap.put(instanceConfig.getInstanceName(), instanceConfig); } }
InstanceConfig config = new InstanceConfig(instance); String zoneId = "rack_" + i / 10; config.setZoneId(zoneId); config.setHostName(instance); config.setPort("9000"); allNodes.add(instance); config.setWeight(weight);
InstanceConfig config = new InstanceConfig(instance); String rack_id = "rack_" + i/25; String sub_rack_id = "subrack-" + i/5; config.setDomain(domain); config.setHostName(instance); config.setPort("9000"); allNodes.add(instance); config.setWeight(weight);
continue; ZNRecord record = helixInstanceConfig.getRecord(); String[] hostnameSplit = helixInstanceConfig.getHostName().split("_"); Preconditions.checkState(hostnameSplit.length >= 2); String adminPort = record.getSimpleField(CommonConstants.Helix.Instance.ADMIN_PORT_KEY); String message = String.format("Admin port is missing for host: %s", helixInstanceConfig.getHostName()); LOGGER.error(message); throw new InvalidConfigException(message);
public void dropInstanceFromCluster(String clusterName, String instanceId) { ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor<ZNRecord>(_zkClient)); Builder keyBuilder = accessor.keyBuilder(); InstanceConfig instanceConfig = InstanceConfig.toInstanceConfig(instanceId); instanceId = instanceConfig.getInstanceName(); // ensure node is not live LiveInstance liveInstance = accessor.getProperty(keyBuilder.liveInstance(instanceId)); if (liveInstance != null) { throw new HelixException(String .format("Cannot drop instance %s as it is still live. Please stop it first", instanceId)); } InstanceConfig config = accessor.getProperty(keyBuilder.instanceConfig(instanceId)); if (config == null) { String error = "Node " + instanceId + " does not exist, cannot drop"; _logger.warn(error); throw new HelixException(error); } ClusterConfig clusterConfig = accessor.getProperty(keyBuilder.clusterConfig()); // ensure node is disabled, otherwise fail if (config.getInstanceEnabled() && (clusterConfig.getDisabledInstances() == null || !clusterConfig.getDisabledInstances().containsKey(instanceId))) { String error = "Node " + instanceId + " is enabled, cannot drop"; _logger.warn(error); throw new HelixException(error); } _admin.dropInstance(clusterName, config); }
String instanceName = instancesUsed.get(i); int currentInstanceConfigVersion = instanceConfigStat.getVersion(); int lastKnownInstanceConfigVersion = _lastKnownInstanceConfigs.get(instanceName).getRecord().getVersion(); Stat stat = instanceConfigStatMap.get(instanceConfig.getInstanceName()); if (stat != null) { instanceConfig.getRecord().setVersion(stat.getVersion());
private void updateDisabledInstances() { // Move the calculating disabled instances to refresh _disabledInstanceForPartitionMap.clear(); _disabledInstanceSet.clear(); for (InstanceConfig config : _instanceConfigMap.values()) { Map<String, List<String>> disabledPartitionMap = config.getDisabledPartitionsMap(); if (!config.getInstanceEnabled()) { _disabledInstanceSet.add(config.getInstanceName()); } for (String resource : disabledPartitionMap.keySet()) { if (!_disabledInstanceForPartitionMap.containsKey(resource)) { _disabledInstanceForPartitionMap.put(resource, new HashMap<String, Set<String>>()); } for (String partition : disabledPartitionMap.get(resource)) { if (!_disabledInstanceForPartitionMap.get(resource).containsKey(partition)) { _disabledInstanceForPartitionMap.get(resource).put(partition, new HashSet<String>()); } _disabledInstanceForPartitionMap.get(resource).get(partition) .add(config.getInstanceName()); } } } if (_clusterConfig.getDisabledInstances() != null) { _disabledInstanceSet.addAll(_clusterConfig.getDisabledInstances().keySet()); } }
liveInstanceSet.add(instanceName); if (!config.getInstanceEnabled() || (clusterConfig.getDisabledInstances() != null && clusterConfig.getDisabledInstances().containsKey(instanceName))) { disabledInstanceSet.add(instanceName); oldDisabledPartitions.put(instanceName, config.getDisabledPartitions()); disabledPartitions.put(instanceName, config.getDisabledPartitionsMap()); Set<String> instanceTags = Sets.newHashSet(config.getTags()); tags.put(instanceName, instanceTags);