Repository navigation
fix(join): budget generated output and synchronous work - #2713
Merged
Merged
Conversation
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
bashkit | bddf43b | Commit Preview URL Branch Preview URL |
Oct 13 2026, 04:31 AM |
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.
What changed
Join reserves shared live-memory capacity before generating matching-row
products. Parsing, key grouping and emission consume shared work and check
cancellation/deadlines. Budget failures abort the execution as resource errors;
ordinary many-to-many output remains complete through pipelines and redirects.
Why
Join previously built its full result in an ordinary String before dispatcher
accounting. Its synchronous matching loops did not poll execution limits.
Before / After
Ordinary inputs
a 1 / a 2anda x / a yhave two rows per table. With a70-unit work budget, unchanged main returned all four rows: the required-error
fixture failed, exit 101. With this patch the fixture passes: the public API
returns a work-budget resource error and the session accepts a later execution.
The same ordinary inputs under normal limits produce exactly:
Verified in the default CLI with producer exit 0 and an exact-output assertion.
Five ordinary option combinations match GNU join. A stdout capture limit of
8 bytes still permits 24 complete output bytes through a pipe and VFS redirect.
Small unit tests cover memory admission, generated work, cancellation, deadline
mapping, contextual Unicode lowercasing, and the stream's byte/text copy.
Risk
Medium: join now rejects requests that exceed configured live-memory, aggregate
input or work budgets. Small budgets may reject valid matching rows. GNU output
semantics remain unchanged when budgets admit the work.
Checklist
just pre-pr,just test, all-target/all-feature ClippyBuilds on the separately merged dependency repair in #2704. Existing resource
limits and CI definitions are unchanged. Benchmark histories are retained; the
parallel results vary on the shared machine and do not isolate join overhead.