J-HowHuang commented on code in PR #20068:
URL: https://github.com/apache/pinot/pull/20068#discussion_r4408590295


##########
pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java:
##########
@@ -218,35 +219,43 @@ public void setGroupByTrimThreshold(int 
groupByTrimThreshold) {
     _groupByTrimThreshold = groupByTrimThreshold;
   }
 
+  /// Adds one plan node per segment to `planNodes`. With prefetch enabled, a 
segment for which the [FetchPlanner]
+  /// plans a [FetchContext] gets a plan node that acquires and releases its 
buffers around execution, and is added to
+  /// `fetchSegmentContexts` with its context added to `fetchContexts` at the 
same position. A segment for which the
+  /// planner returns null (it needs no fetch) gets the plain plan node, as 
without prefetch.
+  private void addSegmentPlanNodes(List<SegmentContext> segmentContexts, 
QueryContext queryContext,
+      Function<SegmentContext, PlanNode> segmentPlanNodeMaker, List<PlanNode> 
planNodes,
+      List<SegmentContext> fetchSegmentContexts, List<FetchContext> 
fetchContexts) {
+    boolean enablePrefetch = queryContext.isEnablePrefetch();
+    for (SegmentContext segmentContext : segmentContexts) {
+      FetchContext fetchContext =
+          enablePrefetch ? 
_fetchPlanner.planFetchForProcessing(segmentContext.getIndexSegment(), 
queryContext) : null;
+      if (fetchContext != null) {
+        fetchSegmentContexts.add(segmentContext);
+        fetchContexts.add(fetchContext);
+        planNodes.add(new 
AcquireReleaseColumnsSegmentPlanNode(segmentPlanNodeMaker.apply(segmentContext),
+            segmentContext, fetchContext));
+      } else {
+        planNodes.add(segmentPlanNodeMaker.apply(segmentContext));
+      }
+    }
+  }
+
   @Override
   public Plan makeInstancePlan(List<SegmentContext> segmentContexts, 
QueryContext queryContext,
       ExecutorService executorService) {
     applyQueryOptions(queryContext);
     boundGroupingSetsBaseAggregation(segmentContexts, queryContext);
 
-    int numSegments = segmentContexts.size();
-    List<PlanNode> planNodes = new ArrayList<>(numSegments);
-    List<FetchContext> fetchContexts;
-    if (queryContext.isEnablePrefetch()) {
-      fetchContexts = new ArrayList<>(numSegments);
-      for (SegmentContext segmentContext : segmentContexts) {
-        FetchContext fetchContext =
-            
_fetchPlanner.planFetchForProcessing(segmentContext.getIndexSegment(), 
queryContext);
-        fetchContexts.add(fetchContext);
-        planNodes.add(
-            new 
AcquireReleaseColumnsSegmentPlanNode(makeSegmentPlanNode(segmentContext, 
queryContext), segmentContext,
-                fetchContext));
-      }
-    } else {
-      fetchContexts = List.of();
-      for (SegmentContext segmentContext : segmentContexts) {
-        planNodes.add(makeSegmentPlanNode(segmentContext, queryContext));
-      }
-    }
+    List<PlanNode> planNodes = new ArrayList<>(segmentContexts.size());
+    List<SegmentContext> fetchSegmentContexts = new ArrayList<>();
+    List<FetchContext> fetchContexts = new ArrayList<>();

Review Comment:
   done



-- 
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]

Reply via email to