/** * Returns True iff: * - The given instance is disabled in Helix. * - The instance is being shutdown. * False otherwise * * @param instanceName Name of instance to check. * @return True if instance is disabled in helix, or is being shutdown, False otherwise. */ public boolean isInactive(String instanceName) { InstanceConfig instanceConfig = _instanceConfigMap.get(instanceName); if (instanceConfig == null) { LOGGER.error("Instance config for instance '{}' does not exist", instanceName); return true; } if (!instanceConfig.getInstanceEnabled()) { LOGGER.info("Instance '{}' is disabled", instanceName); return true; } if (Boolean .parseBoolean(instanceConfig.getRecord().getSimpleField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS))) { LOGGER.info("Instance '{}' is shutting down", instanceName); return true; } return false; } }
continue; ZNRecord record = helixInstanceConfig.getRecord(); String[] hostnameSplit = helixInstanceConfig.getHostName().split("_"); Preconditions.checkState(hostnameSplit.length >= 2);
if (previousInstanceConfig.getRecord().getVersion() == currentInstanceConfig.getRecord().getVersion()) { continue; previousInstanceConfig.getRecord().getSimpleField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS); String isShuttingDown = currentInstanceConfig.getRecord().getSimpleField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS);
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());
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);
InstanceConfig instanceConfig = new InstanceConfig("Server_localhost_1234"); instanceConfigs.add(instanceConfig); instanceConfig.getRecord().setSimpleField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS, "false");
@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); }
InstanceConfig instanceConfig = new InstanceConfig(instanceName); instanceConfigs.add(instanceConfig); instanceConfig.getRecord().setSimpleField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS, "false");
InstanceConfig instanceConfig = new InstanceConfig(instanceName); instanceConfigs.add(instanceConfig); instanceConfig.getRecord().setSimpleField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS, "false");
InstanceConfig instanceConfig = new InstanceConfig("Server_localhost_1234"); instanceConfigs.add(instanceConfig); instanceConfig.getRecord().setSimpleField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS, "true");
instanceConfig.getRecord().setBooleanField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS, true); _helixAdmin.setInstanceConfig(_clusterName, instance, instanceConfig); instanceConfig.getRecord().setBooleanField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS, false); _helixAdmin.setInstanceConfig(_clusterName, instance, instanceConfig); instanceConfig.getRecord().setBooleanField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS, true); _helixAdmin.setInstanceConfig(_clusterName, instanceName, instanceConfig); instanceConfig.getRecord().setBooleanField(CommonConstants.Helix.IS_SHUTDOWN_IN_PROGRESS, false); _helixAdmin.setInstanceConfig(_clusterName, instanceName, instanceConfig);
/** * Remove a tag from this instance * @param tag a property of this instance */ public void removeTag(String tag) { List<String> tags = getRecord().getListField(InstanceConfigProperty.TAG_LIST.toString()); if (tags == null) { return; } if (tags.contains(tag)) { tags.remove(tag); } }
/** * Get arbitrary tags associated with the instance * @return a list of tags */ public List<String> getTags() { List<String> tags = getRecord().getListField(InstanceConfigProperty.TAG_LIST.toString()); if (tags == null) { tags = new ArrayList<String>(0); } return tags; }
/** * Check if an instance contains a tag * @param tag the tag to check * @return true if the instance contains the tag, false otherwise */ public boolean containsTag(String tag) { List<String> tags = getRecord().getListField(InstanceConfigProperty.TAG_LIST.toString()); if (tags == null) { return false; } return tags.contains(tag); }
/** * Check if an instance contains a tag * @param tag the tag to check * @return true if the instance contains the tag, false otherwise */ public boolean containsTag(String tag) { List<String> tags = getRecord().getListField(InstanceConfigProperty.TAG_LIST.toString()); if (tags == null) { return false; } return tags.contains(tag); }
/** * Get arbitrary tags associated with the instance * @return a list of tags */ public List<String> getTags() { List<String> tags = getRecord().getListField(InstanceConfigProperty.TAG_LIST.toString()); if (tags == null) { tags = new ArrayList<String>(0); } return tags; }
@GET @Path("{instanceName}/configs") public Response getInstanceConfig(@PathParam("clusterId") String clusterId, @PathParam("instanceName") String instanceName) throws IOException { HelixDataAccessor accessor = getDataAccssor(clusterId); InstanceConfig instanceConfig = accessor.getProperty(accessor.keyBuilder().instanceConfig(instanceName)); if (instanceConfig != null) { return JSONRepresentation(instanceConfig.getRecord()); } return notFound(); }
@Override public ZNRecord update(ZNRecord currentData) { if (currentData == null) { throw new HelixException("Cluster: " + clusterName + ", instance: " + instanceName + ", participant config is null"); } InstanceConfig instanceConfig = new InstanceConfig(currentData); for (String partitionName : partitionNames) { instanceConfig.setInstanceEnabledForPartition(resourceName, partitionName, enabled); } return instanceConfig.getRecord(); } }, AccessOption.PERSISTENT);
@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);
@Override public void enableInstance(String clusterName, String instanceName, boolean enabled) { String instanceConfigsPath = PropertyPathBuilder.instanceConfig(clusterName); if (!_baseDataAccessor.exists(instanceConfigsPath, 0)) { _baseDataAccessor.create(instanceConfigsPath, new ZNRecord(instanceName), 0); } String instanceConfigPath = instanceConfigsPath + "/" + instanceName; ZNRecord record = (ZNRecord) _baseDataAccessor.get(instanceConfigPath, null, 0); InstanceConfig instanceConfig = new InstanceConfig(record); instanceConfig.setInstanceEnabled(enabled); _baseDataAccessor.set(instanceConfigPath, instanceConfig.getRecord(), 0); }