Skip to content

Commit 75184f0

Browse files
joseph-isaacsclaude
andcommitted
feat(layout): add the ExecNode trait and push-based exec graph
Add `plan::exec`, a push-based executor interface for physical plans. `ExecNode` is the per-operator trait: a single `compute` that takes the events that arrived for the node (child pieces, child closes, segment deliveries) through a `StepCx`, and spawns children, requests segments, and emits row-tagged `Piece`s through it. It reports `Wait`, `Yield`, or `Done`. `ExecGraph` is the flat node arena. It wires nodes child-to-parent, routes IO deliveries to the leaves that requested them, and hands its owner the root's pieces and batches of `IoRequest`s from `compute`. Nodes never talk to the IO service; the owner answers requests with `set_io_result`. `PlanVTable::exec` builds the node for an operator, reached through `PlanRef::exec`. No operator implements it yet; the default bails. Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWYmfHTFtaEdhdyd3u5hv3
1 parent 1557fb0 commit 75184f0

6 files changed

Lines changed: 636 additions & 0 deletions

File tree

‎Cargo.lock‎

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎vortex-layout/Cargo.toml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ pin-project-lite = { workspace = true }
3535
prost = { workspace = true }
3636
rustc-hash = { workspace = true }
3737
sketches-ddsketch = { workspace = true }
38+
smallvec = { workspace = true }
3839
termtree = { workspace = true }
3940
tokio = { workspace = true, features = ["rt"], optional = true }
4041
tracing = { workspace = true }

0 commit comments

Comments
 (0)