Repository navigation
Shared fixtures: accept an idle poller's capacity refusal before its worker's own shutdown (legacy markers) - #834
Conversation
…down #831's merge group (run 40637163461, MariaDB restarts job 122649110376) failed legacy-two-markers-completed on the published PHP record. The replacement Rust SDK worker completed its workflow task, its idle activity poller then got PHP's typed 429 long_poll_capacity_exhausted, and the worker deregistered itself. The legacy-marker contract accepted that clean-shutdown path only for query pollers; for workflow and activity pollers it required a recovered poll. A refusal leases nothing, and the published SDKs stop all their pollers together at shutdown. The fixtures' poll_capacity policy now names the kinds that may end in shutdown (allow_shutdown_after_commit: workflow, activity, query). A refusal is accepted without recovery only when that same worker withdraws after it, and after its own accepted commit; the contract's outcome counts still guard the work. This matches #816's rule for patch deployments. The workflow and activity "withdrawal without recovery" cases are now acceptances, with rejections for no withdrawal after the refusal, a withdrawal before the worker's own commit, and another worker's withdrawal. Recovery-isolation controls place the withdrawal before the refusal for every kind. Legacy-marker contract tests pass 2585/2585. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
General reviewed exact head The exception is limited to the declared no-task A refused poll of any of the three kinds leases no work. Requiring another successful poll from a worker whose own work is committed and whose pollers are stopping together adds no safety to this fixture. The explicit fixture policy now treats those equivalent shutdown cases consistently. This does not change Server or SDK behavior, remove outcome checks or assert that an arbitrary worker termination is safe. I independently ran the exact-head legacy-marker contract suite in an isolated offline Node22 container: 2,585/2,585 pass, no failures, skips or cancellations. The controls cover premature/foreign withdrawal, unregistered workers, wrong retry/status/task envelopes and changed recovery authority/options. No Rust code or native observation retrieval was used for this review. The Rust owner's failure transcript attribution is recorded in the PR; this review independently verifies the rule and controls rather than claiming a fresh replay of that hosted observation. Keep #831's failed merge-group attempt as evidence. Qualify and merge this correction through the normal checks/queue, then qualify #831 against the accepted combined source; do not treat a timing-only retry as the disposition. |



Part of #325. This fixes the shared failure in #831's merge group: run 40637163461, MariaDB restarts job 122649110376.
Failure.
legacy-two-markers-completedon the published PHP record (retainedlegacy-marker/php/record.failure-excerpt.txt):429 long_poll_capacity_exhausted,Retry-After: 1(request 14).…%3Areplacement, request 17).legacy-marker-contract.mjs:271accepted that clean-shutdown path only for query pollers. For workflow and activity pollers it required a recovered poll. The rule dates from October 11 with no recorded rationale.Change. This uses the same reasoning as #816's patch-deployment rule.
poll_capacitypolicy now names the kinds that may end in shutdown:allow_shutdown_after_commit: ["workflow", "activity", "query"]. It replacesallow_query_shutdown_after_commit.Tests.
This reverses an earlier rule, so a review from General is requested.
🤖 Generated with Claude Code