Jackie-Jiang commented on code in PR #15817:
URL: https://github.com/apache/pinot/pull/15817#discussion_r2122176340
##########
pinot-common/src/main/java/org/apache/pinot/common/utils/SegmentUtils.java:
##########
@@ -76,25 +81,61 @@ public static Integer
getPartitionIdFromRealtimeSegmentName(String segmentName)
return null;
}
+ /// Returns the partition id of a segment based on segment ZK metadata.
+ /// Can return `null` if the partition id cannot be determined.
@Nullable
- private static Integer getRealtimeSegmentPartitionId(SegmentZKMetadata
segmentZKMetadata,
+ private static Integer getPartitionIdFromSegmentZKMetadata(SegmentZKMetadata
segmentZKMetadata,
@Nullable String partitionColumn) {
SegmentPartitionMetadata segmentPartitionMetadata =
segmentZKMetadata.getPartitionMetadata();
- if (segmentPartitionMetadata != null) {
- Map<String, ColumnPartitionMetadata> columnPartitionMap =
segmentPartitionMetadata.getColumnPartitionMap();
- ColumnPartitionMetadata columnPartitionMetadata = null;
- if (partitionColumn != null) {
- columnPartitionMetadata = columnPartitionMap.get(partitionColumn);
- } else {
- if (columnPartitionMap.size() == 1) {
- columnPartitionMetadata =
columnPartitionMap.values().iterator().next();
- }
- }
- if (columnPartitionMetadata != null &&
columnPartitionMetadata.getPartitions().size() == 1) {
- return columnPartitionMetadata.getPartitions().iterator().next();
+ return segmentPartitionMetadata != null ?
getPartitionIdFromSegmentPartitionMetadata(segmentPartitionMetadata,
+ partitionColumn) : null;
+ }
+
+ /// Returns the partition id of a segment based on
[SegmentPartitionMetadata].
+ /// Can return `null` if the partition id cannot be determined.
+ @VisibleForTesting
+ @Nullable
+ static Integer
getPartitionIdFromSegmentPartitionMetadata(SegmentPartitionMetadata
segmentPartitionMetadata,
+ @Nullable String partitionColumn) {
+ Map<String, ColumnPartitionMetadata> columnPartitionMap =
segmentPartitionMetadata.getColumnPartitionMap();
+ ColumnPartitionMetadata columnPartitionMetadata = null;
+ if (partitionColumn != null) {
+ columnPartitionMetadata = columnPartitionMap.get(partitionColumn);
+ } else {
+ if (columnPartitionMap.size() == 1) {
+ columnPartitionMetadata =
columnPartitionMap.values().iterator().next();
}
}
- return null;
+ if (columnPartitionMetadata != null &&
columnPartitionMetadata.getPartitions().size() == 1) {
+ return columnPartitionMetadata.getPartitions().iterator().next();
+ } else {
+ return null;
+ }
+ }
+
+ /// Returns the partition id of a segment based on segment name or ZK
metadata, or a default partition id based on the
+ /// hash of the segment name.
+ /// Important: The method is costly because it may read data from zookeeper.
Do not use it in query execution path.
+ public static int getSegmentPartitionIdOrDefault(String segmentName, String
tableNameWithType,
+ HelixManager helixManager, @Nullable String partitionColumn) {
+ Integer partitionId = getSegmentPartitionId(segmentName,
tableNameWithType, helixManager, partitionColumn);
+ return partitionId != null ? partitionId :
getDefaultPartitionId(segmentName);
+ }
+
+ /// Returns the partition id of a segment based on segment name or ZK
metadata, or a default partition id based on the
+ /// hash of the segment name.
+ public static int getSegmentPartitionIdOrDefault(SegmentZKMetadata
segmentZKMetadata,
Review Comment:
Yeah I also realized that, but kept it here as a useful util
--
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]