wirybeaver opened a new pull request, #19471:
URL: https://github.com/apache/pinot/pull/19471

   ## Summary
   
   Adds the first executable AQE prerequisite: an opt-in static materialized 
HASH exchange. Existing worker counts and placement remain unchanged.
   
   - marks one deterministic eligible HASH exchange when 
`materializedExchange=true`
   - writes producer-local, consumer-independent logical partition files, 
including empty partitions
   - reports exact row/byte handles through `OpChainComplete`
   - fetches local or remote partitions through a backpressure-aware gRPC stream
   - cleans output on consumption, cancellation, failure, and shutdown
   - validates complete producer/worker/partition handle coverage at the broker
   
   ## Design
   
   ```text
   producer rows
        |
        v
   existing HashExchange
        |
        +--> logical p0 file --+
        +--> logical p1 file --+--> atomic publish --> OpChainComplete handles
        +--> logical pN file --+                            |
                                                           v
   consumer worker p <--- pulls logical p from every producer worker
        |
        v
   existing downstream operators
   ```
   
   The materialized identity is `(requestId, producerStageId, producerWorkerId, 
logicalPartitionId)` and deliberately excludes consumer identity. This PR does 
not resize stages or delay dispatch; it establishes the data boundary required 
by later staged-dispatch and late-binding phases.
   
   ## Safety
   
   - default OFF
   - only unsorted, non-prepartitioned, single-consumer HASH exchanges are 
eligible
   - atomic file publication; incomplete output is never visible
   - cleanup/read registration is serialized against cancellation and shutdown
   - gRPC output honors readiness and closes abandoned readers
   
   ## Test Plan
   
   - `PinotDispatchPlannerTest,PlanNodeSerDeTest`: 140 passed
   - materialized mailbox/store/gRPC/operator/session/dispatcher tests: 109 
passed
   - Spotless, Checkstyle, and license checks passed for `pinot-common`, 
`pinot-spi`, `pinot-query-planner`, and `pinot-query-runtime`
   
   ## Follow-ups
   
   1. staged dispatch (dependent PR)
   2. late-bound materialized routing (dependent PR)
   3. runtime partition coalescing and production hardening
   


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