This is an automated email from the ASF dual-hosted git repository.

xbli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 3db93ccc21 missed one util method that should derive partition id from 
uploaded segment name (#13612)
3db93ccc21 is described below

commit 3db93ccc210991ad91b6a5306b3b610d8f5e0507
Author: Xiaobing <[email protected]>
AuthorDate: Mon Jul 15 18:29:05 2024 -0700

    missed one util method that should derive partition id from uploaded 
segment name (#13612)
    
    * add one util method to derive partition id from uploaded segment names to 
avoid missing the segment name checks
    
    * add tests
---
 .../apache/pinot/common/utils/SegmentUtils.java    | 32 +++++++++++++---------
 .../pinot/common/utils/SegmentUtilsTest.java       |  9 ++++++
 2 files changed, 28 insertions(+), 13 deletions(-)

diff --git 
a/pinot-common/src/main/java/org/apache/pinot/common/utils/SegmentUtils.java 
b/pinot-common/src/main/java/org/apache/pinot/common/utils/SegmentUtils.java
index 8b89a2b1a5..26d231651d 100644
--- a/pinot-common/src/main/java/org/apache/pinot/common/utils/SegmentUtils.java
+++ b/pinot-common/src/main/java/org/apache/pinot/common/utils/SegmentUtils.java
@@ -39,17 +39,10 @@ public class SegmentUtils {
   @Nullable
   public static Integer getRealtimeSegmentPartitionId(String segmentName, 
String realtimeTableName,
       HelixManager helixManager, @Nullable String partitionColumn) {
-    // A fast path if the segmentName is an LLC segment name: get the 
partition id from the name directly
-    LLCSegmentName llcSegmentName = LLCSegmentName.of(segmentName);
-    if (llcSegmentName != null) {
-      return llcSegmentName.getPartitionGroupId();
+    Integer partitionId = getPartitionIdFromRealtimeSegmentName(segmentName);
+    if (partitionId != null) {
+      return partitionId;
     }
-
-    UploadedRealtimeSegmentName uploadedRealtimeSegmentName = 
UploadedRealtimeSegmentName.of(segmentName);
-    if (uploadedRealtimeSegmentName != null) {
-      return uploadedRealtimeSegmentName.getPartitionId();
-    }
-
     // Otherwise, retrieve the partition id from the segment zk metadata.
     SegmentZKMetadata segmentZKMetadata =
         
ZKMetadataProvider.getSegmentZKMetadata(helixManager.getHelixPropertyStore(), 
realtimeTableName, segmentName);
@@ -61,13 +54,26 @@ public class SegmentUtils {
   @Nullable
   public static Integer getRealtimeSegmentPartitionId(String segmentName, 
SegmentZKMetadata segmentZKMetadata,
       @Nullable String partitionColumn) {
-    // A fast path if the segmentName is an LLC segment name: get the 
partition id from the name directly
+    Integer partitionId = getPartitionIdFromRealtimeSegmentName(segmentName);
+    if (partitionId != null) {
+      return partitionId;
+    }
+    // Otherwise, retrieve the partition id from the segment zk metadata.
+    return getRealtimeSegmentPartitionId(segmentZKMetadata, partitionColumn);
+  }
+
+  @Nullable
+  private static Integer getPartitionIdFromRealtimeSegmentName(String 
segmentName) {
+    // A fast path to get partition id if the segmentName is in a known format 
like LLC.
     LLCSegmentName llcSegmentName = LLCSegmentName.of(segmentName);
     if (llcSegmentName != null) {
       return llcSegmentName.getPartitionGroupId();
     }
-    // Otherwise, retrieve the partition id from the segment zk metadata.
-    return getRealtimeSegmentPartitionId(segmentZKMetadata, partitionColumn);
+    UploadedRealtimeSegmentName uploadedRealtimeSegmentName = 
UploadedRealtimeSegmentName.of(segmentName);
+    if (uploadedRealtimeSegmentName != null) {
+      return uploadedRealtimeSegmentName.getPartitionId();
+    }
+    return null;
   }
 
   @Nullable
diff --git 
a/pinot-common/src/test/java/org/apache/pinot/common/utils/SegmentUtilsTest.java
 
b/pinot-common/src/test/java/org/apache/pinot/common/utils/SegmentUtilsTest.java
index 1257bc0498..812c6c9959 100644
--- 
a/pinot-common/src/test/java/org/apache/pinot/common/utils/SegmentUtilsTest.java
+++ 
b/pinot-common/src/test/java/org/apache/pinot/common/utils/SegmentUtilsTest.java
@@ -88,11 +88,20 @@ public class SegmentUtilsTest {
     String segmentName = "uploaded__table_name__3__100__1716185755000";
 
     try {
+      // Check the util method that gets segmentZKMetadata via HelixManager 
for partition id.
       Integer partitionId =
           SegmentUtils.getRealtimeSegmentPartitionId(segmentName, 
"realtimeTableName", null, "partitionColumn");
       assertEquals(partitionId, 3);
     } catch (Exception e) {
       fail("Exception should not be thrown");
     }
+
+    try {
+      // Check the util method that has segmentZKMetadata passed in directly 
for partition id.
+      Integer partitionId = 
SegmentUtils.getRealtimeSegmentPartitionId(segmentName, null, 
"partitionColumn");
+      assertEquals(partitionId, 3);
+    } catch (Exception e) {
+      fail("Exception should not be thrown");
+    }
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to