Repository navigation
corgi half join: check hashed keys per run and chunk, after time filtering - #954
Merged
frankmcsherry merged 2 commits intoOct 19, 2026
Conversation
…ering A pair whose identifiers match must also precede in time and, when keys are hashed, have equal real keys. Test time first, and compare the surviving pairs' real keys with one equal_idx call per run and arranged chunk (in batches of at most BLOCK), instead of a compare_at per candidate. The per-run meet already produces each run's and chunk's pairs together, so no regrouping is needed. Replaces the approach in TimelyDataflow#945; its collision test is kept. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XsakwFGwtESwZ1gSYwG4o
A run and chunk with no time-eligible pairs, or none since the last full batch, no longer enter corgi with an empty comparison. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XsakwFGwtESwZ1gSYwG4o
frankmcsherry
added a commit
to frankmcsherry/differential-dataflow
that referenced
this pull request
Oct 19, 2026
… container-only interface Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XsakwFGwtESwZ1gSYwG4o
frankmcsherry
added a commit
that referenced
this pull request
Oct 19, 2026
* dogs3 half join: ship each output with the unit's capabilities 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 #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 * corgi half join: read #954's collision test through the container-only interface Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XsakwFGwtESwZ1gSYwG4o --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces #945.
A half-join pair whose identifiers match must also precede in time and, when keys are hashed, have equal real keys. This tests time first, then compares the surviving pairs' real keys with one
equal_idxcall per run and arranged chunk, in batches of at mostBLOCK, instead of acompare_atper candidate pair. Since the per-run meet in #937,meetalready produces each run's and chunk's pairs together, so no regrouping or combined column list is needed.#945's collision test is kept: forged hash collisions, strict and not, with batches split by a small
BLOCK. Making every key check pass fails it.Triangles delta query (1M edges, mini-02, five alternating runs, medians): neutral, as expected with about one candidate per update. Load 1247 → 1255 ms at 1 worker, 448 → 455 ms at 4; triangle counts match. The change removes the allocating per-pair comparisons.
Tests:
cargo test -p interactive -p ddir-serverpasses (191 passed, 5 ignored); no new clippy warnings.🤖 Generated with Claude Code
https://claude.ai/code/session_019XsakwFGwtESwZ1gSYwG4o