Repository navigation
feat(explain): cut pipelines at breakers on every route and measure a load's operators - #1099
Conversation
… load's operators
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1616ecb4cc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
This change makes every explain document carry What landed
Codex finding on
|
What & why
Two changes to what a plan tells you. First, every explain document carries
pipelines, and the cut is the one the operators run: query and load explains used to clear the field, and the planner's cut could drift from the emission an operator declares. Second, aload csvoverwrite reports what each of its operators did, the measurement the bulk-load work needs: after #1085 SF30 still takes 511 s and nothing recorded how that splits across parse, validate and write.pipelineson every route (explain_version7), cut at each node that holds its whole input (Sort,Aggregate,AntiJoin,RankFuse, a load'sValidate, a costed multi-hopExpand) and at a join's build side, the collected left side of a cross or contains join included.rows,elapsed_compute_ns(its polls, busy time) andwall_ns(first poll to last batch, waits included), asexecuted.operatorson the receipt;omnigraph mutate --jsonandPOST /mutateanswer it asChangeOutput.executed, overwrite only.load pipeline <n>: …andload executed <Node>: rows <n>lines.Backing issue / RFC
docs/rfcs/2026-10-15-bulk-load-as-a-query-plan.md(feat(load): plan CSV overwrites and reuse validation reads #1026, perf(load): check edge endpoints in an unchained integer key set #1085 before it); D11 unchanged.Checklist
explain_pipelines_cut_at_breakers.gqt,explain_pipelines_rank_fuse_arms.gqt,explain_pipelines_collected_join_sides.gqt,load_csv_plan_overwrite_route_and_access_paths.gqt; Rust only where the format cannot reach: the planner's cross-join pipelines, the api-types round trip, the CLI'smutate --jsonwire shape (the served GQT host refusesexpect planon a load; no servedload csvsucceeds under test because a server-safe base may not usefile://)docs/user/queries/explain.md,docs/user/mutations/index.md,crates/omnigraph-gqt/README.mdchangelog.d/explain-pipelines-every-route.changed.md,changelog.d/load-executed-operators.added.mdLocal verification
executed.operators(the three walls nest, source inside validate inside sink, so each phase is the difference of two walls): 13.72 s total; parse 5.47 s (40 %, equal to its compute: one thread), validate 3.36 s (24 %), write 3.22 s (23 %, compute 1.14 s, the rest waiting on fragment writes), other 1.57 s.Notes for reviewers
openapi.json:ChangeOutputgains the optionalexecuted; additive.explain_version6 to 7: a consumer pinning 6 refuses the new documents. Diff and merge documents print what they did before.