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]