Repository navigation
[query-runtime] Skip leaf execution for empty dynamic filter - #19470
Draft
wirybeaver wants to merge 1 commit into
Draft
wirybeaver wants to merge 1 commit into
wirybeaver wants to merge 1 commit into
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #19470 +/- ##
=============================================
+ Coverage 39.94% 68.24% +28.30%
- Complexity 1449 1450 +1
=============================================
Files 3520 3520
Lines 228940 228951 +11
Branches 36313 36317 +4
=============================================
+ Hits 91453 156253 +64800
+ Misses 129215 60444 -68771
- Partials 8272 12254 +3982
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
wirybeaver
force-pushed
the
pinot-aqe
branch
from
September 5, 2026 22:09
21ad1af to
03f7a9c
Compare
Summary: - Use the completed dynamic-broadcast pipeline breaker as a real adaptive execution seam. - Skip constructing and executing probe-side leaf requests when the materialized SEMI JOIN build side is empty. - Preserve the normal LeafOperator, mailbox EOS, pipeline-breaker statistics, and leaf/send statistics path. - Keep normal execution for empty-input-sensitive aggregates and EXPLAIN, and preserve rolling-upgrade EnrichedJoinNode support. - Remove the unused partition-coalescing policy that had no production caller. Test Plan: - 37 focused LeafOperator, pipeline-breaker, and server-plan tests passed. - 141 QueryRunnerTest cases passed, including empty-build global aggregates and dynamic-broadcast success/failure paths. - Spotless, Checkstyle, license format/check, and module test-compile passed for pinot-query-runtime.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR flow is maintained manually as ASCII in the Design section below.
Summary
This PR replaces the unused partition-coalescing policy with a minimal, executable AQE proof of concept in Pinot's multi-stage engine.
For a dynamic-broadcast SEMI JOIN, the existing pipeline breaker materializes the build side before the probe leaf is compiled. When that runtime result is empty, Pinot now skips constructing and executing the probe-side single-stage requests while preserving the normal multi-stage operator chain, mailbox EOS, pipeline-breaker statistics, and leaf/send statistics.
This is deliberately narrower than changing stage parallelism: Pinot's current streaming mailbox graph is eagerly dispatched and binds routing to concrete workers, so resizing a downstream stage after its producer completes is not yet safe.
Design
The skip decision is explicit: normal
LeafOperatorconstruction still requires one or two server requests. Empty-input-sensitive operators—global aggregates and grouping sets containing the grand-total()set—remain on the normal SSE path. EXPLAIN also retains normal request construction.Roadmap: downstream parallelism AQE
Supporting "complete a stage, then resize an undispatched downstream stage" requires all three seams together:
M -> K) using completed byte statistics.Join reordering, dynamic stage insertion/removal, running-stage cancellation, and retries are out of scope for the first rule.
Test Plan
LeafOperator, pipeline-breaker, and server-plan tests passed.QueryRunnerTestcases passed, including empty-build global aggregation and dynamic-broadcast success/failure paths../mvnw spotless:apply -pl pinot-query-runtime./mvnw checkstyle:check -pl pinot-query-runtime./mvnw license:format -pl pinot-query-runtime./mvnw license:check -pl pinot-query-runtime./mvnw test-compile -pl pinot-query-runtime -Dmaven.compiler.showDeprecation=true -Dmaven.compiler.showWarnings=trueA full dependency build was also attempted but is currently blocked by the existing
pinot-segment-localZstandardDecompressor/org.jetbrains.annotations.NotNullcompilation issue.