Keep a build node's pause in a state of its own, and pull as not paused when the pause cannot be read (steps bucket full, 2026-10-25) #81

Merged
jschoubben merged 2 commits from fix/steps-bucket-ages into main 2026-10-25 18:06:32 +00:00
Member

Why

KV_mesh-build-go_steps filled to its 64 MiB cap (67,089,975 bytes, 27,371 keys, no age): every step writes a new key and none is ever removed. mesh-controller #465's check passed but its end was refused ('maximum bytes exceeded', 18:42:04). The catalogue fix gives steps a 2-day age; the node's pause key lived in the same bucket and would silently end after the age, so it moves to a state of its own.

What

  • delivery.PausesState = "pauses"; Puller.PausePut writes the pause there (Put stays the fallback when nil).
  • An unreadable pause no longer ends the puller: logged once ('the pause of cannot be read: ...; pulling as not paused'), then it pulls. Rule (lead's decision): a puller that stops silently is the worse failure; a node kept from building is held by capacity 0, not a pause. Also covers Pull reaching restore before Serve.

Order

Merge FIRST, with a merge commit: mesh-catalog fix/steps-bucket-ages pins this head (518dae5ec9). After both merges, the controller's next start (mesh-controller #465's delivery) raises the pauses bucket and the steps age, which frees the full bucket.

Tests

TestPullPauseOutlivesARestart extended (a Load that errors still takes an ask; fails on the old code). No new top-level test. gofmt, go vet with and without -tags integration, go test pass. Recovery mode: no try; merge by hand.

Issue: issue 1945 note 37 (second of issue 501's kind).

Reviewed-by: reviewer-puller@shanks at 518dae5ec9

## Why KV_mesh-build-go_steps filled to its 64 MiB cap (67,089,975 bytes, 27,371 keys, no age): every step writes a new key and none is ever removed. mesh-controller #465's check passed but its end was refused ('maximum bytes exceeded', 18:42:04). The catalogue fix gives steps a 2-day age; the node's pause key lived in the same bucket and would silently end after the age, so it moves to a state of its own. ## What - delivery.PausesState = "pauses"; Puller.PausePut writes the pause there (Put stays the fallback when nil). - An unreadable pause no longer ends the puller: logged once ('the pause of <node> cannot be read: ...; pulling as not paused'), then it pulls. Rule (lead's decision): a puller that stops silently is the worse failure; a node kept from building is held by capacity 0, not a pause. Also covers Pull reaching restore before Serve. ## Order Merge FIRST, with a merge commit: mesh-catalog fix/steps-bucket-ages pins this head (518dae5ec9c8). After both merges, the controller's next start (mesh-controller #465's delivery) raises the pauses bucket and the steps age, which frees the full bucket. ## Tests TestPullPauseOutlivesARestart extended (a Load that errors still takes an ask; fails on the old code). No new top-level test. gofmt, go vet with and without -tags integration, go test pass. Recovery mode: no try; merge by hand. Issue: issue 1945 note 37 (second of issue 501's kind). Reviewed-by: reviewer-puller@shanks at 518dae5ec9c88c96906961a3314c901361a394c5
mesh-tools added 2 commits 2026-10-25 17:59:16 +00:00
The steps state of the build modules filled to the bus's 64 MiB cap (27,370 keys of mesh-build-go,
none ever removed) and refused a passed check's end. Its keys get an age in the catalogue; the
pause key lived among them and would then have ended by itself. Puller.PausePut writes it to
delivery.PausesState instead; Put stays the fallback for a module not yet moved.
Pull as not paused when the pause cannot be read, and say so once, instead of ending the puller silently
mesh/delivery held for a person: merged without a passing check: only a person decides what follows
mesh/delivery-group group fix/steps-bucket-ages held: a member is held: novox/mesh-sdk@518dae5ec9c8 (merged without a passing check: only a person decides what…
mesh/check checking 518dae5ec9c8 on 7f89cb51de15 | novox/mesh-sdk#81 in group fix/steps-bucket-ages
518dae5ec9
A Load error ended Pull, and the modules run it in a goroutine whose error nobody reads: every
build node would stop pulling when the new pauses state could not be read (or when Pull reached
restore before Serve). A node kept from building is held by capacity 0, not by a pause.
Author
Member

Delivery novox/mesh-sdk@518dae5ec9c8 — held since 2026-10-25T18:06:34Z

Held for a person: merged without a passing check: only a person decides what follows — the merge reached the trunk without a passing check.

Source — source.main moved to novox/mesh-sdk@7f89cb51de. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Group fix/steps-bucket-ages: novox/mesh-catalog@4e82a824be, novox/mesh-sdk@518dae5ec9

  • composed together: fail — the checker's verdict at the members' heads (3636b5efb454): shanks

Transitions

  • 2026-10-25 17:59 (new) → proposed (announced): novox/mesh-sdk#81's head announced
  • 2026-10-25 18:01 proposed → rejected (refused): a verdict names this commit and the trunk's head as its trunk commit, and the gate failed or could not run, or the repository's own check failed
  • 2026-10-25 18:06 rejected → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides what follows

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-sdk@518dae5ec9c8` — **held** since 2026-10-25T18:06:34Z Held for a person: merged without a passing check: only a person decides what follows — the merge reached the trunk without a passing check. **Source** — source.main moved to novox/mesh-sdk@7f89cb51de15. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/steps-bucket-ages`: novox/mesh-catalog@4e82a824be7a, novox/mesh-sdk@518dae5ec9c8 - composed together: fail — the checker's verdict at the members' heads (3636b5efb454): shanks **Transitions** - 2026-10-25 17:59 (new) → proposed (announced): novox/mesh-sdk#81's head announced - 2026-10-25 18:01 proposed → rejected (refused): a verdict names this commit and the trunk's head as its trunk commit, and the gate failed or could not run, or the repository's own check failed - 2026-10-25 18:06 rejected → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides what follows The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
jschoubben merged commit 7f89cb51de into main 2026-10-25 18:06:32 +00:00
jschoubben deleted branch fix/steps-bucket-ages 2026-10-25 18:06:33 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-sdk#81