Skip to content

Exercise published SDK timers through restart and cooperative cancellation - #152

Merged
rmcdaniel merged 5 commits into
mainfrom
test/service-mode-timers
Oct 7, 2026
Merged

rmcdaniel merged 5 commits into
mainfrom
test/service-mode-timers

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Oct 7, 2026 •

Copy link
Copy Markdown
Member

Change

Adds one documented, repeatable published-artifact timer experiment for PHP, Python and Rust workflow workers. It checks twelve cells: normal completion, worker SIGKILL and cold replay after the timer fires, Server restart across the original deadline, and cooperative cancellation in each language. Every cell inspects actual persisted timer history and checks the public waiting/terminal state. Duplicate cancellation must retain its original identity and deadline, and a cancelled timer must remain unfired after its due time.

Reuses the existing Sample App workers and isolated Compose stack. The timer command removes its stack on success or failure and runs directly in a repository-local GitHub Actions job. It does not add another conformance coordinator.

The example tuple and both prepared Rust lockfiles now select the published Rust SDK with cooperative cancellation support. Its resolver explicitly accepts stable Rust 2.x and 3.x while preserving the other components' current supported versions and rejecting prereleases.

The interrupted timer run found that Rust's bounded poll retry contract exits during the Server outage. Published SDK 3.2.1 adds an explicit service-worker recovery option through durable-workflow/sdk-rust#69. This example opts into that recovery and negotiates cooperative cancellation in each timer worker. All twelve published cells passed before merge and again on merged main.

Part of durable-workflow/.github#122. This PR supplies the missing SDK timer paths. The broader experiment inventory remains open.

Validation

  • Shell syntax, exact tuple resolution in a Node container, and whitespace checks pass.

  • Forty-two Python metadata/verifier tests pass in a Python container. The new checks reject early fire, missing/duplicate durable events, wrong identities, rewritten original deadlines, replacement runs, downtime outside the original deadline and cancelled timers firing after their due time. The pending observer waits for both timer history and waiting status across their separate API reads.

  • Published timer run passes all twelve cells on 2544cd9c2ccb9828ae6eaf0e073182428eac1910, October 7, 22:58:11–23:04:11 UTC. Server 2.5.9 digest sha256:11c11e11498b63e644d906e43f49810a1bc0b5298f750734fe0edb279c622bca, PHP SDK 2.2.3, Python SDK 2.4.2, Rust SDK 3.2.1, CLI 2.1.3, Workflow 2.5.3 and Waterline 2.3.1.

  • Each language passes normal completion, SIGKILL/cold replay, Server downtime crossing its original deadline and cooperative cancellation. All three cancellation runs converge as Cancelled, retain duplicate request identity/deadline and remain unfired after the timer's original due time.

  • Ordinary PHP 8.4/8.5 application and microservice checks, published polyglot journey, sample Compose and candidate container startup pass.

  • The merged-main timer repeat passes all twelve cells on 85f99cf80eae8b673c784885985fe0566f94acc7. All other merged-main workflows also pass.

  • Published image qualification passes native amd64 and arm64 startup checks. Independent anonymous registry reads verify both GHCR and Docker Hub main and immutable tag sha-85f99cf80eae8b673c784885985fe0566f94acc7-run-37700272728-1 at multi-platform digest sha256:32948877cf048baffa5369ef85105bf47d7c7d4611945e505151bc8b45cb1060, with the expected source/revision labels in both architecture configurations.

No claim is made for concurrent timer groups, timer-bearing application upgrades or every cancellation scope permutation.

@rmcdaniel
rmcdaniel marked this pull request as ready for review October 7, 2026 23:05
@rmcdaniel
rmcdaniel merged commit 85f99cf into main Oct 7, 2026
12 checks passed
@rmcdaniel
rmcdaniel deleted the test/service-mode-timers branch October 7, 2026 23:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants