Repository navigation
fix: review fixes from the 0.6.14 forward-port (0.6) - #691
Conversation
- Budget::reserve replaces a label's own earmark instead of counting it twice. - Dropping a live ClientHost inside the persona runtime shuts its runtime down in the background instead of panicking. - QueueRegistry::get releases the name index before reading the queue list, so it cannot deadlock against register. - Bulk DLQ retry and purge flag only the exhausted jobs on the queue they target. - UiOps skips the cron actions when Tom, which declares the schedules, is not running. - Tom serves at least the queues its cron schedules write to. - Chaos leaves the shard-ops owner, migrator and admin sessions alone. - The unexplained-cancel scan reads every cancellation in its window. - The Python runtime uses the heartbeat, staleness and rescue timings the Rust runtimes use.
…artitions The compact-batch leg of the per-slot open-claim read looked up closure evidence through the parent closure tables, so it locked every slot's closure partitions and waited behind claim-ring prune of another slot. It now reads the selected slot's closure partitions, as the row-local leg already did.
…uous ones Rescue leaves an attempt whose retained ready bodies are ambiguous running and retries its batch without it, but only within the attempts the pass first selected. Every pass selects the oldest stale attempts first, so a batch's worth of ambiguous ones kept heartbeat, deadline and callback rescue from every attempt behind them. Hydration now reports all of a batch's ambiguous attempts before it writes anything, and the pass sets them aside and selects again. Busy retained attempts still only shrink the pass's selection.
…promotion The readiness check accepted any granted notify-queue lock in the cluster, so another notifying backend could let the test run without contention. It now waits for the holder's backend and checks the holder is still committing when promotion returns.
…events The event built from the worker's copy kept the finished attempt's heartbeat_at and deadline_at, which a read of the completed job returns as None.
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the
|
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
… the event Completion through Completed follow-up specs built its own snapshot, which kept the finished attempt's heartbeat_at and deadline_at in both the event and the job the specs receive. Both paths now share one helper.
… error An empty attempt list printed job 0 run_lease 0, and several attempts named only the first.
Fixes for findings from the review of the 0.6.14 forward-port (#687) whose code also lives on 0.6. They reach main with the next forward-port.
Product fixes
done_entriesandleasesreads still use parent tables.Completedevents clear the finished attempt'sheartbeat_atanddeadline_at, matching a read of the completed job. Completion throughCompletedfollow-up specs uses the same snapshot, so the specs receive it too.job 0 run_lease 0for an empty attempt list.Soak harness fixes
Budget::reservereplaces a label's earmark instead of counting it twice.ClientHostinside the persona runtime no longer panics.QueueRegistry::getcan no longer deadlock againstregister.Docs
waiter_timed_outdescribes the waiter's lock wait running out, not a single lane-lock hold.Validation
Each behaviour change has a test that fails without it: the ambiguous-backlog rescue test rescues nothing without the fix (
left: [],right: [501]); the slot-scoped read times out behind a lock on another slot's closure partitions; theCompletedevent tests, with and without a follow-up spec, see the attempt's timestamps; each harness fix has a unit, database or Python test that fails on the old code. Format, all-target/all-feature Clippy with warnings denied and the workspace build pass. On PostgreSQL 18 the persona soak unit tests (65), the lifecycle hook suite (23), the enqueue-spec suite (23) and the rescue, notify-lock, slot-scoped and admin scope subset of the queue-storage runtime tests pass; on PostgreSQL 17 the queue-storage subset and the completed-event tests pass. The local PostgreSQL 17 run of the soak's database-backed tests failed onNo space left on devicefrom the database host's full disk, not on assertions.