yuanbenson commented on code in PR #9309:
URL: https://github.com/apache/pinot/pull/9309#discussion_r964225345
##########
pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/assignment/segment/OfflineSegmentAssignment.java:
##########
@@ -52,63 +55,55 @@ protected int getReplication(TableConfig tableConfig) {
@Override
public List<String> assignSegment(String segmentName, Map<String,
Map<String, String>> currentAssignment,
Map<InstancePartitionsType, InstancePartitions> instancePartitionsMap) {
+ SegmentAssignmentStrategy segmentAssignmentStrategy =
_assignmentStrategyMap.get(InstancePartitionsType.OFFLINE);
+ // Need to check assignmentStrategy for Dim Tables as following pre
conditions state would return false
+ if (segmentAssignmentStrategy instanceof
DimTableSegmentAssignmentStrategy) {
+ return segmentAssignmentStrategy.assignSegment(segmentName,
+ currentAssignment, null, InstancePartitionsType.OFFLINE);
+ }
InstancePartitions instancePartitions =
instancePartitionsMap.get(InstancePartitionsType.OFFLINE);
Preconditions.checkState(instancePartitions != null, "Failed to find
OFFLINE instance partitions for table: %s",
_tableNameWithType);
_logger.info("Assigning segment: {} with instance partitions: {} for
table: {}", segmentName, instancePartitions,
_tableNameWithType);
- List<String> instancesAssigned = assignSegment(segmentName,
currentAssignment, instancePartitions);
+ List<String> instancesAssigned = assignSegment(segmentName,
currentAssignment,
+ instancePartitions, segmentAssignmentStrategy,
InstancePartitionsType.OFFLINE);
_logger.info("Assigned segment: {} to instances: {} for table: {}",
segmentName, instancesAssigned,
_tableNameWithType);
return instancesAssigned;
}
- @Override
- protected int getSegmentPartitionId(String segmentName) {
- SegmentZKMetadata segmentZKMetadata =
-
ZKMetadataProvider.getSegmentZKMetadata(_helixManager.getHelixPropertyStore(),
_tableNameWithType, segmentName);
- Preconditions.checkState(segmentZKMetadata != null,
- "Failed to find segment ZK metadata for segment: %s of table: %s",
segmentName, _tableNameWithType);
- return getPartitionId(segmentZKMetadata);
- }
-
- private int getPartitionId(SegmentZKMetadata segmentZKMetadata) {
- String segmentName = segmentZKMetadata.getSegmentName();
- ColumnPartitionMetadata partitionMetadata =
-
segmentZKMetadata.getPartitionMetadata().getColumnPartitionMap().get(_partitionColumn);
- Preconditions.checkState(partitionMetadata != null,
- "Segment ZK metadata for segment: %s of table: %s does not contain
partition metadata for column: %s",
- segmentName, _tableNameWithType, _partitionColumn);
- Set<Integer> partitions = partitionMetadata.getPartitions();
- Preconditions.checkState(partitions.size() == 1,
- "Segment ZK metadata for segment: %s of table: %s contains multiple
partitions for column: %s", segmentName,
- _tableNameWithType, _partitionColumn);
- return partitions.iterator().next();
- }
-
@Override
public Map<String, Map<String, String>> rebalanceTable(Map<String,
Map<String, String>> currentAssignment,
Map<InstancePartitionsType, InstancePartitions> instancePartitionsMap,
@Nullable List<Tier> sortedTiers,
@Nullable Map<String, InstancePartitions> tierInstancePartitionsMap,
Configuration config) {
InstancePartitions offlineInstancePartitions =
instancePartitionsMap.get(InstancePartitionsType.OFFLINE);
+ SegmentAssignmentStrategy segmentAssignmentStrategy =
_assignmentStrategyMap.get(InstancePartitionsType.OFFLINE);
+ // Need to check assignmentStrategy for Dim Tables as following pre
conditions state would return false
+ if (segmentAssignmentStrategy instanceof
DimTableSegmentAssignmentStrategy) {
+ return segmentAssignmentStrategy.reassignSegments(currentAssignment,
+ offlineInstancePartitions, InstancePartitionsType.OFFLINE);
Review Comment:
We should call `reassignSegments(...)` instead of
`segmentAssignmentStrategy.reassignSegments(...)` as this will introduce
different behavior (e.g. bypass bootstrap). Feel free to consider the
suggestion above ^.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]