Skip to content

Add late-bound materialized partition routing - #19483

Closed
wirybeaver wants to merge 3 commits into
apache:masterfrom
wirybeaver:pinot-aqe-late-bound-routing
Closed

wirybeaver wants to merge 3 commits into
apache:masterfrom
wirybeaver:pinot-aqe-late-bound-routing

Conversation

@wirybeaver

@wirybeaver wirybeaver commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

@codecov-commenter

codecov-commenter commented Sep 6, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 79.25430% with 217 lines in your changes missing coverage. Please review.
✅ Project coverage is 68.39%. Comparing base (7a00b23) to head (ff285a4).

Files with missing lines Patch % Lines
.../pinot/query/service/dispatch/QueryDispatcher.java 63.46% 46 Missing and 11 partials ⚠️
...mailbox/materialized/MaterializedMailboxStore.java 80.54% 30 Missing and 13 partials ⚠️
...ilbox/materialized/MaterializedSendingMailbox.java 58.33% 17 Missing and 3 partials ⚠️
.../planner/physical/MaterializedExchangePlanner.java 41.93% 4 Missing and 14 partials ⚠️
...org/apache/pinot/query/mailbox/MailboxService.java 79.26% 10 Missing and 7 partials ⚠️
...ailbox/materialized/MaterializedMailboxWriter.java 64.58% 16 Missing and 1 partial ⚠️
...pinot/query/mailbox/channel/GrpcMailboxServer.java 81.53% 6 Missing and 6 partials ⚠️
...not/query/service/dispatch/StageDispatchGraph.java 93.39% 3 Missing and 4 partials ⚠️
...y/mailbox/materialized/MaterializedMailboxKey.java 73.68% 2 Missing and 3 partials ⚠️
...e/operator/MaterializedMailboxReceiveOperator.java 92.53% 2 Missing and 3 partials ⚠️
... and 6 more
Additional details and impacted files
@@              Coverage Diff              @@
##             master   #19483       +/-   ##
=============================================
+ Coverage     39.94%   68.39%   +28.44%     
- Complexity     1449     1450        +1     
=============================================
  Files          3520     3528        +8     
  Lines        228940   229926      +986     
  Branches      36313    36473      +160     
=============================================
+ Hits          91453   157254    +65801     
+ Misses       129215    60326    -68889     
- Partials       8272    12346     +4074     
Flag Coverage Δ
integration 100.00% <ø> (ø)
integration1 100.00% <ø> (ø)
integration2 0.00% <ø> (ø)
java-25 68.39% <79.25%> (+28.44%) ⬆️
lane-a 100.00% <ø> (ø)
lane-b 0.00% <ø> (ø)
temurin 68.39% <79.25%> (+28.44%) ⬆️
unittests 68.39% <79.25%> (+28.44%) ⬆️
unittests1 58.40% <79.25%> (?)
unittests2 39.78% <3.15%> (-0.16%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Introduce an opt-in file-backed HASH exchange that preserves the existing worker assignment. Producers materialize consumer-independent logical partitions, report exact output handles, and consumers fetch their static partition from every producer.

The implementation includes atomic publication, cancellation-safe cleanup, bounded gRPC streaming with backpressure, output coverage validation, and planner/runtime/storage tests.

Test Plan:
- PinotDispatchPlannerTest, PlanNodeSerDeTest: 140 passed
- materialized mailbox/runtime/dispatcher tests: 109 passed
- spotless, checkstyle, and license checks passed for pinot-common, pinot-spi, pinot-query-planner, and pinot-query-runtime
Add an opt-in broker-owned dispatch graph that treats materialized exchanges as completion barriers while contracting streaming-connected stages into atomic dispatch groups.

The broker dispatches only ready groups, waits for exact unique worker completion and stream closure, preserves assignments, and orders the local root stage under one absolute deadline.

Test Plan:
- StageDispatchGraphTest, StreamingQuerySessionTest, StreamingDispatchObserverTest, QueryDispatcherTest: 110 passed
- spotless, checkstyle, and license checks passed for pinot-common, pinot-spi, and pinot-query-runtime
@wirybeaver
wirybeaver force-pushed the pinot-aqe-late-bound-routing branch from 55658bc to ff285a4 Compare October 4, 2026 20:33
@wirybeaver wirybeaver closed this Oct 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants