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

xiangfu 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 3f324a4f0b Reduce the overhead of 
PinotHelixResourceManager.getSegmentsFor() when no time filtering is required 
(#13928)
3f324a4f0b is described below

commit 3f324a4f0bfdecb1b14e459deec647a2ff2f734d
Author: Xiaotian (Jackie) Jiang <17555551+jackie-ji...@users.noreply.github.com>
AuthorDate: Mon Sep 2 21:02:53 2024 -0700

    Reduce the overhead of PinotHelixResourceManager.getSegmentsFor() when no 
time filtering is required (#13928)
---
 .../helix/core/PinotHelixResourceManager.java      | 39 +++++++++++-----------
 1 file changed, 19 insertions(+), 20 deletions(-)

diff --git 
a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java
 
b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java
index e8122b5485..3d3a7ded35 100644
--- 
a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java
+++ 
b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java
@@ -882,32 +882,31 @@ public class PinotHelixResourceManager {
       long startTimestamp, long endTimestamp, boolean excludeOverlapping) {
     IdealState idealState = getTableIdealState(tableNameWithType);
     Preconditions.checkState(idealState != null, "Failed to find ideal state 
for table: %s", tableNameWithType);
-    List<String> segments = new ArrayList<>(idealState.getPartitionSet());
-    List<SegmentZKMetadata> segmentZKMetadataList = 
getSegmentsZKMetadata(tableNameWithType);
-    List<String> selectedSegments = new ArrayList<>();
-    ArrayList<String> filteredSegments = new ArrayList<>();
-    for (SegmentZKMetadata segmentZKMetadata : segmentZKMetadataList) {
-      String segmentName = segmentZKMetadata.getSegmentName();
-      // Compute the interesction of segmentZK metadata and idealstate for 
valid segmnets
-      if (!segments.contains(segmentName)) {
-        filteredSegments.add(segmentName);
-        continue;
-      }
-      // No need to filter by time if the time range is not specified
-      if (startTimestamp == Long.MIN_VALUE && endTimestamp == Long.MAX_VALUE) {
-        selectedSegments.add(segmentName);
-      } else {
+    Set<String> segmentSet = idealState.getPartitionSet();
+    List<String> selectedSegments;
+    if (startTimestamp == Long.MIN_VALUE && endTimestamp == Long.MAX_VALUE) {
+      selectedSegments = new ArrayList<>(segmentSet);
+    } else {
+      selectedSegments = new ArrayList<>();
+      List<SegmentZKMetadata> segmentZKMetadataList = 
getSegmentsZKMetadata(tableNameWithType);
+      ArrayList<String> filteredSegments = new ArrayList<>();
+      for (SegmentZKMetadata segmentZKMetadata : segmentZKMetadataList) {
+        String segmentName = segmentZKMetadata.getSegmentName();
+        // Compute the intersection of segmentZK metadata and idealstate for 
valid segments
+        if (!segmentSet.contains(segmentName)) {
+          filteredSegments.add(segmentName);
+          continue;
+        }
         // Filter by time if the time range is specified
         if (isSegmentWithinTimeStamps(segmentZKMetadata, startTimestamp, 
endTimestamp, excludeOverlapping)) {
           selectedSegments.add(segmentName);
         }
       }
+      LOGGER.info(
+          "Successfully computed the segments for table : {}. # of filtered 
segments: {}, the filtered segment list: "
+              + "{}. Only showing up to 100 filtered segments.", 
tableNameWithType, filteredSegments.size(),
+          filteredSegments.size() > 100 ? filteredSegments.subList(0, 100) : 
filteredSegments);
     }
-    LOGGER.info(
-        "Successfully computed the segments for table : {}. # of filtered 
segments: {}, the filtered segment list: "
-            + "{}. Only showing up to 100 filtered segments.", 
tableNameWithType, filteredSegments.size(),
-        (filteredSegments.size() > 0) ? filteredSegments.subList(0, 
Math.min(filteredSegments.size(), 100))
-            : filteredSegments);
     return shouldExcludeReplacedSegments ? 
excludeReplacedSegments(tableNameWithType, selectedSegments)
         : selectedSegments;
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to