Summary
Dimension tables in Pinot are designed to automatically use the AllServersSegmentAssignmentStrategy which assigns segments to all available servers for optimal join performance. Replica group strategy and instance assignment configurations have no meaning for them.
However, when users incorrectly configure dimension tables with "segmentAssignmentStrategy": "replicagroup" or other non-"allservers" strategies, but lack replicaGroupStrategyConfig or InstanceAssignmentConfig, the system triggers confusing error messages - Failed to find the replica-group strategy config during instance assignment.
The issue only occurs in above specific configuration pattern. If either config replicaGroupStrategyConfig or InstanceAssignmentConfig is present, the code passes despite being incorrect for dimension tables.
Why Replica Group Strategy is Meaningless for Dimension Tables
- Automatic Strategy Override - Dimension tables automatically use
AllServersSegmentAssignmentStrategy regardless of any configuration
// SegmentAssignmentStrategyFactory.java
if (tableConfig.isDimTable()) {
// Segment Assignment Strategy for DIM tables
SegmentAssignmentStrategy segmentAssignmentStrategy = new AllServersSegmentAssignmentStrategy();
segmentAssignmentStrategy.init(helixManager, tableConfig);
return segmentAssignmentStrategy;
}
- Validation Skipped - The system explicitly skips replica group validation for dimension tables
// TableConfigUtils.java
public static void validateInstancePoolsAndReplicaGroups(TableConfig tableConfig) {
// Instance pools / replica groups aren't relevant for dimension tables
if (tableConfig.isDimTable()) {
return;
}
}
- Design Purpose - Dimension tables are designed to be available on all servers within a tenant for efficient join operations. Unlike fact tables that use replica groups for resource optimization, dimension tables need universal availability
Precise Failure Pattern
- When Configuration Fails : The error occurs only when:
- ✅ "segmentAssignmentStrategy": "replicagroup" is set
- ❌ replicaGroupStrategyConfig is NOT set
- ❌ InstanceAssignmentConfig is NOT set
{
"isDimTable": true,
"segmentsConfig": {
"segmentAssignmentStrategy": "replicagroup"
// Missing: replicaGroupStrategyConfig
}
// Missing: instanceAssignmentConfigMap
}
- When Configuration Passes (Incorrectly) : The code passes when either config is present, despite being meaningless for dimension tables:
Case 1: With InstanceAssignmentConfig
{
"isDimTable": true,
"segmentsConfig": {
"segmentAssignmentStrategy": "replicagroup"
},
"instanceAssignmentConfigMap": {
"OFFLINE": {
"tagPoolConfig": {...},
"replicaGroupPartitionConfig": {...}
}
}
}
Case 2: With replicaGroupStrategyConfig
{
"isDimTable": true,
"segmentsConfig": {
"segmentAssignmentStrategy": "replicagroup"
},
"validationConfig": {
"replicaGroupStrategyConfig": {
"partitionColumn": "someColumn",
"numInstancesPerPartition": 2
}
}
}
Why only "segmentAssignmentStrategy": "replicagroup" triggers this error
When this configuration is set for a dimension table, below results in true :
//InstanceAssignmentConfigUtils.allowInstanceAssignment():
case OFFLINE:
return tableType == TableType.OFFLINE && ((instanceAssignmentConfigMap != null
&& instanceAssignmentConfigMap.get(InstancePartitionsType.OFFLINE.toString()) != null)
|| AssignmentStrategy.REPLICA_GROUP_SEGMENT_ASSIGNMENT_STRATEGY
.equalsIgnoreCase(tableConfig.getValidationConfig().getSegmentAssignmentStrategy()));
This then leads to InstanceAssignmentConfigUtils.getInstanceAssignmentConfig() , which looks for the deprecated replicaGroupStrategyConfig (which will be null in above pattern)
ReplicaGroupStrategyConfig replicaGroupStrategyConfig = segmentConfig.getReplicaGroupStrategyConfig();
Preconditions.checkState(replicaGroupStrategyConfig != null, "Failed to find the replica-group strategy config");
Summary
Dimension tables in Pinot are designed to automatically use the
AllServersSegmentAssignmentStrategywhich assigns segments to all available servers for optimal join performance. Replica group strategy and instance assignment configurations have no meaning for them.However, when users incorrectly configure dimension tables with
"segmentAssignmentStrategy": "replicagroup"or other non-"allservers" strategies, but lackreplicaGroupStrategyConfigorInstanceAssignmentConfig, the system triggers confusing error messages -Failed to find the replica-group strategy configduring instance assignment.The issue only occurs in above specific configuration pattern. If either config
replicaGroupStrategyConfigorInstanceAssignmentConfigis present, the code passes despite being incorrect for dimension tables.Why Replica Group Strategy is Meaningless for Dimension Tables
AllServersSegmentAssignmentStrategyregardless of any configurationPrecise Failure Pattern
Case 1: With InstanceAssignmentConfig
Case 2: With replicaGroupStrategyConfig
Why only
"segmentAssignmentStrategy": "replicagroup"triggers this errorWhen this configuration is set for a dimension table, below results in
true:This then leads to
InstanceAssignmentConfigUtils.getInstanceAssignmentConfig(), which looks for the deprecatedreplicaGroupStrategyConfig(which will benullin above pattern)