Repository navigation
dogs3: HalfJoinTactic for the proxy half-join tactic; BlobList public - #1020
Closed
frankmcsherry wants to merge 2 commits into
Closed
frankmcsherry wants to merge 2 commits into
frankmcsherry wants to merge 2 commits into
Conversation
The half join had no seam between its time logic and its data: dogs3's HalfJoinTactic reads the arrangement's batches itself. ProxyHalfJoinTactic owns the total-order comparison, strictness, the output time rule (the update's own time, and its data time joined with the arranged time) and blocking; ProxyHalfJoinBackend owns key matching, value proxies and output containers, like the join and reduce backends. Matches are pairs of positions into the block's two presented sides, which `cross` is handed back, so a backend evaluates the time rule in its own layout; a time per match in the tactic measured at a third of a half-join-heavy tick. Arranged times are presented as stored: advancing them by a frontier moves them in the total order relative to incomparable stream times, so the backend is given no lower bound to advance by. The arranged side is a bridge with the join's contract, sorted and consolidated by ((key, val), time); the stream side is in key order only. VecHalfJoinBackend is the reference backend. The test checks the tactic against the definition over product times, strict and not, several block sizes, and colliding hashes. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_019XsakwFGwtESwZ1gSYwG4o
differential's ProxyHalfJoinTactic implements dogs3's HalfJoinTactic by calling its `prepare`; the trait is dogs3's, so the impl lives here. The generic release batcher BlobList is public: every HalfJoinTactic needs a batcher that agrees with it on when an update is released, and this is the one for Vec containers; a backend with its own container type writes its own, as DDIR's columnar one does. The test runs the proxy half join over the vec backend against the cursor half join in one dataflow on random inputs, strict and not, at one and two workers, with blocks of several sizes. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_019XsakwFGwtESwZ1gSYwG4o
This was referenced Oct 24, 2026
Member
Author
|
Replaced by #1022, which moves the proxy half-join tactic into dogs3, built on int_proxy's public surface. |
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.
Builds on #1019; only the last commit is new.
differential's
ProxyHalfJoinTacticimplements dogs3'sHalfJoinTacticby calling itsprepare. The trait is dogs3's, so the impl lives here, and it is five lines.BlobList, the generic release batcher, is now public. EveryHalfJoinTacticneeds a batcher that agrees with it on when an update is released, andBlobListis the one forVeccontainers. A backend with its own container type writes its own, as DDIR's columnarHalfJoinBatcherdoes.Test
tests/proxy_half_join.rsruns the proxy half join over the vec backend against the cursor half join in one dataflow, on random inputs, strict and not, at one and two workers, with blocks of several sizes. It passes.🤖 Generated with Claude Code
https://claude.ai/code/session_019XsakwFGwtESwZ1gSYwG4o