Skip to content

dogs3 half join: ship each output with the unit's capabilities - #955

Merged
frankmcsherry merged 2 commits into
TimelyDataflow:master-nextfrom
frankmcsherry:dogs3-halfjoin-stamps
Oct 19, 2026
Merged

frankmcsherry merged 2 commits into
TimelyDataflow:master-nextfrom
frankmcsherry:dogs3-halfjoin-stamps

Conversation

@frankmcsherry

@frankmcsherry frankmcsherry commented Oct 19, 2026 •

Copy link
Copy Markdown
Member

Replaces #947.

HalfJoinTactic::prep yielded each output container with a single time, so that the driver could pick one capability for it, and tactics split their output by capability to make that possible. Timely stamps messages with capability sets, so the driver now ships every container stamped with the unit's CapabilitySet, which covers every update the unit released. prep yields containers only, as DD's JoinTactic::prep already does.

  • dogs3's cursor tactic keeps one container builder instead of one per capability.
  • The corgi tactic drops its per-row capability search and the gather that split each projected block by capability, and ships the block whole. Its tests now check that every output row is covered by lower.

Net −31 lines (+48/−79).

Triangles delta query (1M edges, mini-02, five alternating runs, medians; counts match):

load, 1 worker load, 4 workers churn, 1 worker churn, 4 workers
master-next 1247 ms 448 ms 5.74 ms 2.72 ms
this PR (measured on top of #954) 1161 ms 399 ms 5.89 ms 2.61 ms

#954 is neutral on this benchmark, so the load change is this PR's. The 1-worker churn spreads overlap.

Rebased onto #954; the second commit updates #954's collision test to the container-only interface (flat_map(|c| ..)).

Tests: cargo test -p interactive -p ddir-server -p differential-dogs3 passes (195 passed, 9 ignored); no new clippy warnings.

🤖 Generated with Claude Code

https://claude.ai/code/session_019XsakwFGwtESwZ1gSYwG4o

frankmcsherry and others added 2 commits October 18, 2026 22:25
A half-join tactic yielded each output container with a single time, so the driver could pick one
capability for it, and tactics split their output by capability. Timely stamps messages with
capability sets, so the driver now ships every container stamped with the unit's capabilities,
which cover every update it released. HalfJoinTactic::prep yields containers only.

The cursor tactic keeps one builder instead of one per capability. The corgi tactic drops its
per-row capability search and the gather that split each block by capability, and ships the
projected block whole. Replaces TimelyDataflow#947's one-capability special case.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019XsakwFGwtESwZ1gSYwG4o
… container-only interface

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019XsakwFGwtESwZ1gSYwG4o
@frankmcsherry
frankmcsherry merged commit fae437e into TimelyDataflow:master-next Oct 19, 2026
6 checks passed
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.

1 participant