Skip to content

Dimension tables with incorrect segmentAssignmentStrategy cause confusing replica-group errors #18345

@rsrkpatwari1234

Description

@rsrkpatwari1234

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:
  1. ✅ "segmentAssignmentStrategy": "replicagroup" is set
  2. ❌ replicaGroupStrategyConfig is NOT set
  3. ❌ 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");

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions