public RoutingTableInstancePruner(List<InstanceConfig> instanceConfigs) { for (InstanceConfig instanceConfig : instanceConfigs) { _instanceConfigMap.put(instanceConfig.getInstanceName(), instanceConfig); } }
private void updateInstanceConfigsMapFromExternalView(Map<String, InstanceConfig> relevantInstanceConfigs, List<InstanceConfig> instanceConfigs, ExternalView externalView) { Set<String> relevantInstanceNames = new HashSet<>(); // Gather all the instance names contained in the external view for (String partitionName : externalView.getPartitionSet()) { relevantInstanceNames.addAll(externalView.getStateMap(partitionName).keySet()); } // Update the relevant instance config map with the instance configs given for (InstanceConfig instanceConfig : instanceConfigs) { if (relevantInstanceNames.contains(instanceConfig.getInstanceName())) { relevantInstanceConfigs.put(instanceConfig.getInstanceName(), instanceConfig); } } }
/** * 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; }
/** * 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; }
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; }
@GET @Path("/instances/{instanceName}") @Produces(MediaType.APPLICATION_JSON) @ApiOperation(value = "Get instance information", produces = MediaType.APPLICATION_JSON) @ApiResponses(value = {@ApiResponse(code = 200, message = "Success"), @ApiResponse(code = 404, message = "Instance not found"), @ApiResponse(code = 500, message = "Internal error")}) public String getInstance( @ApiParam(value = "Instance name", required = true, example = "Server_a.b.com_20000 | Broker_my.broker.com_30000") @PathParam("instanceName") String instanceName) { InstanceConfig instanceConfig = pinotHelixResourceManager.getHelixInstanceConfig(instanceName); if (instanceConfig == null) { throw new ControllerApplicationException(LOGGER, "Instance " + instanceName + " not found", Response.Status.NOT_FOUND); } ObjectNode response = JsonUtils.newObjectNode(); response.put("instanceName", instanceConfig.getInstanceName()); response.put("hostName", instanceConfig.getHostName()); response.put("enabled", instanceConfig.getInstanceEnabled()); response.put("port", instanceConfig.getPort()); response.set("tags", JsonUtils.objectToJsonNode(instanceConfig.getTags())); return response.toString(); }
private Map<Integer, List<String>> buildStreamPartitionMapping(List<InstanceConfig> instanceConfigs) { // Create partition assignment mapping table. Map<Integer, List<String>> partitionToServers = new HashMap<>(); int serverIndex = 0; for (int partitionId = 0; partitionId < NUM_PARTITION; partitionId++) { List<String> assignedServers = new ArrayList<>(); for (int replicaId = 0; replicaId < NUM_REPLICA; replicaId++) { assignedServers.add(instanceConfigs.get(serverIndex % NUM_SERVERS).getInstanceName()); serverIndex++; } partitionToServers.put(partitionId, assignedServers); } return partitionToServers; }
String instanceName = incomingInstanceConfig.getInstanceName();
Stat stat = instanceConfigStatMap.get(instanceConfig.getInstanceName()); if (stat != null) { instanceConfig.getRecord().setVersion(stat.getVersion());
_lastKnownInstanceConfigs.put(instanceConfig.getInstanceName(), instanceConfig);
@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.setPort("2"); helixAdmin.addInstance(HELIX_CLUSTER_NAME, instanceConfig); helixAdmin.addInstanceTag(HELIX_CLUSTER_NAME, instanceConfig.getInstanceName(), TagNameUtils.getBrokerTagForTenant(TagNameUtils.DEFAULT_TENANT_NAME)); idealState = HelixHelper.getBrokerIdealStates(helixAdmin, HELIX_CLUSTER_NAME);
/** * Returns the name of this instance. */ public String getInstanceName() { return _instanceConfig.getInstanceName(); }
/** * Returns the name of this instance. */ public String getInstanceName() { return _instanceConfig.getInstanceName(); }
private static void stopNode() { int nodeId = NUM_NODES - 1; echo("STOPPING " + INSTANCE_CONFIG_LIST.get(nodeId).getInstanceName() + ". Mastership will be transferred to the remaining nodes"); PROCESS_LIST.get(nodeId).stop(); }
private static void stopNode() { int nodeId = NUM_NODES - 1; echo("STOPPING " + INSTANCE_CONFIG_LIST.get(nodeId).getInstanceName() + ". Mastership will be transferred to the remaining nodes"); PROCESS_LIST.get(nodeId).stop(); }
public void stop() { if (isReplicationStarted.get()) { System.out.println("Stopping replication from current master:" + currentMasterConfig.getInstanceName()); rsyncInvoker.stop(); watchService.stop(); processor.stop(); } isReplicationInitiated.set(false); }
@Override public List<String> getInstancesByDomain(String clusterName, String domain) { List<String> instances = new ArrayList<>(); String path = PropertyPathBuilder.instanceConfig(clusterName); BaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_zkClient); List<ZNRecord> znRecords = baseAccessor.getChildren(path, null, 0); for (ZNRecord record : znRecords) { if (record != null) { InstanceConfig instanceConfig = new InstanceConfig(record); if (instanceConfig.isInstanceInDomain(domain)) { instances.add(instanceConfig.getInstanceName()); } } } return instances; }
private static void addNode() throws Exception { NUM_NODES = NUM_NODES + 1; int port = 12000 + NUM_NODES - 1; InstanceConfig instanceConfig = new InstanceConfig("localhost_" + port); instanceConfig.setHostName("localhost"); instanceConfig.setPort("" + port); instanceConfig.setInstanceEnabled(true); echo("ADDING NEW NODE :" + instanceConfig.getInstanceName() + ". Partitions will move from old nodes to the new node."); admin.addInstance(CLUSTER_NAME, instanceConfig); INSTANCE_CONFIG_LIST.add(instanceConfig); MyProcess process = new MyProcess(instanceConfig.getInstanceName()); PROCESS_LIST.add(process); admin.rebalance(CLUSTER_NAME, RESOURCE_NAME, 3); process.start(); }
private static void addNode() throws Exception { NUM_NODES = NUM_NODES + 1; int port = 12000 + NUM_NODES - 1; InstanceConfig instanceConfig = new InstanceConfig("localhost_" + port); instanceConfig.setHostName("localhost"); instanceConfig.setPort("" + port); instanceConfig.setInstanceEnabled(true); echo("ADDING NEW NODE :" + instanceConfig.getInstanceName() + ". Partitions will move from old nodes to the new node."); admin.addInstance(CLUSTER_NAME, instanceConfig); INSTANCE_CONFIG_LIST.add(instanceConfig); MyProcess process = new MyProcess(instanceConfig.getInstanceName()); PROCESS_LIST.add(process); admin.rebalance(CLUSTER_NAME, RESOURCE_NAME, 3); process.start(); }