public static TableConfig getDynamicComputingTableConfig(String tableName) { TableType tableType = TableNameBuilder.getTableTypeFromTableName(tableName); RoutingConfig routingConfig = new RoutingConfig(); Map<String, String> routingTableBuilderOptions = new HashMap<>(); routingTableBuilderOptions.put(RoutingConfig.ENABLE_DYNAMIC_COMPUTING_KEY, "true"); routingConfig.setRoutingTableBuilderOptions(routingTableBuilderOptions); return new TableConfig.Builder(tableType).setTableName(tableName).setRoutingConfig(routingConfig).build(); } }
@Override public void init(Configuration configuration, TableConfig tableConfig, ZkHelixPropertyStore<ZNRecord> propertyStore, BrokerMetrics brokerMetrics) { _tableName = tableConfig.getTableName(); _brokerMetrics = brokerMetrics; // Enable dynamic routing when the config is explicitly set RoutingConfig routingConfig = tableConfig.getRoutingConfig(); if (routingConfig != null) { Map<String, String> routingOption = routingConfig.getRoutingTableBuilderOptions(); _enableDynamicComputing = Boolean.valueOf(routingOption.get(RoutingConfig.ENABLE_DYNAMIC_COMPUTING_KEY)); if (_enableDynamicComputing) { LOGGER.info("Dynamic routing table computation is enabled for table {}", _tableName); } } }
private TableConfig buildRealtimeTableConfig() throws Exception { // Create partition config Map<String, ColumnPartitionConfig> metadataMap = new HashMap<>(); metadataMap.put(PARTITION_COLUMN, new ColumnPartitionConfig(PARTITION_FUNCTION_NAME, NUM_PARTITION)); SegmentPartitionConfig partitionConfig = new SegmentPartitionConfig(metadataMap); // Create the routing config RoutingConfig routingConfig = new RoutingConfig(); routingConfig.setRoutingTableBuilderName("PartitionAwareOffline"); // Create table config TableConfig tableConfig = new TableConfig.Builder(CommonConstants.Helix.TableType.REALTIME).setTableName(REALTIME_TABLE_NAME) .setNumReplicas(NUM_REPLICA).build(); tableConfig.getValidationConfig().setReplicasPerPartition(Integer.toString(NUM_REPLICA)); tableConfig.getIndexingConfig().setSegmentPartitionConfig(partitionConfig); tableConfig.setRoutingConfig(routingConfig); return tableConfig; }
public RoutingTableBuilder createRoutingTableBuilder(TableConfig tableConfig, BrokerMetrics brokerMetrics) { String builderName = null; if (tableConfig.getRoutingConfig() != null) { builderName = tableConfig.getRoutingConfig().getRoutingTableBuilderName();
private TableConfig buildOfflineTableConfig() throws Exception { // Create the replica group aware assignment strategy config ReplicaGroupStrategyConfig replicaGroupStrategyConfig = new ReplicaGroupStrategyConfig(); replicaGroupStrategyConfig.setNumInstancesPerPartition(NUM_PARTITION); replicaGroupStrategyConfig.setMirrorAssignmentAcrossReplicaGroups(true); // Create the routing config RoutingConfig routingConfig = new RoutingConfig(); routingConfig.setRoutingTableBuilderName("PartitionAwareOffline"); // Create table config TableConfig tableConfig = new TableConfig.Builder(CommonConstants.Helix.TableType.OFFLINE).setTableName(OFFLINE_TABLE_NAME) .setNumReplicas(NUM_REPLICA).setSegmentAssignmentStrategy("ReplicaGroupSegmentAssignmentStrategy").build(); tableConfig.getValidationConfig().setReplicaGroupStrategyConfig(replicaGroupStrategyConfig); tableConfig.setRoutingConfig(routingConfig); return tableConfig; }