Skip to content

Long-running worker exits on transient Server poll outage and strands waiting workflows #68

Description

@rmcdaniel

Observed failure

Published Rust SDK 3.2.0's long-running workflow worker exits during a bounded Server restart. The same PHP 2.2.3 and Python 2.4.2 workers recover and finish their pending timers. Rust's timer remains waiting after Server is healthy again because the worker process has exited.

Reproduced in the published-artifact timer experiment on Sample App #152, job 113047763895. Server 2.5.9, MySQL 8 and Redis 7. Normal completion and worker SIGKILL/cold replay pass in all three languages. PHP and Python Server-restart cells pass. Rust exits with WorkerShutdown whose primary error is a transport connection refusal from POST /api/worker/workflow-tasks/poll; deregistration also fails while the endpoint is offline. The Rust workflow remains waiting until the observer's 120-second timeout. Cancellation cells have not run in this failed job.

Acceptance

  • Long-running worker poll loops recover from bounded transient connection, timeout and retryable service failures with bounded backoff.
  • Shutdown remains responsive during backoff. Permanent authentication, capability, protocol and malformed-response failures remain explicit.
  • Do not hide handler failures, stale completion or lost authority as transient poll failures.
  • Add focused regression tests for recovery and shutdown, run normal Rust checks, publish a qualified patch, then repeat the exact published timer experiment.

This is a product finding from durable-workflow/.github#122. Do not make the experiment pass by restarting the exited worker manually or by weakening its Server-restart assertion.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions