Skip to content

Published-SDK patch cohort: PHP SQLite poll refusal (backend_lock_pressure) ends the Python patch Worker #721

Open

Description

@rmcdaniel

Finding

In the published-SDK patch cohort, the published PHP 2.11.1 SQLite runtime refused a Python patch Worker's workflow-task poll with a typed 503, and the Worker exited.

Observed in run 40017239524 / job 120644918290, the execution-and-codec job of PR #708 at head 6b6757e7e2. The same shape failed #707's execution-and-codec job (job 120591054917) in signals-before-worker.

  • Every PHP, embedded and Rust fixture record in the step passed first, including all operator-metrics cases.
  • scripts/conformance/server-parity/published-sdk-patch/python.py then started the published Python patch-replacement Worker against the shared published-PHP SQLite runtime.
  • Its workflow-task poll got 503 with poll_status: backend_lock_pressure and PHP's message Worker poll backend is temporarily locked.. The published SDK raised ServerError from poll_workflow_task and the Worker exited.
  • At the same time, the PHP maintenance container logged SQLSTATE[HY000]: General error: 5 database is locked on a TaskRepair update: 24 repairs completed and one candidate failed.
  • The Worker's deregistration got one 503 and then succeeded on retry.

This is a real refusal from the reference, not an observer artifact. published-sdk-patch/observe-http.mjs deliberately never retries /poll backend_lock_pressure, even with DW_PARITY_PROXY_RETRY_LOCK_PRESSURE=1.

To decide

  1. Cohort scheduling. The patch cohort runs PHP's maintenance loop and a polling Worker on one SQLite file. Should the cohort keep that contention, or give them a non-contending schedule, for example by pausing maintenance during the patch window? This must not hide the refusal.
  2. SDK behavior. backend_lock_pressure is a typed, retryable poll refusal. The published Python SDK ends its Worker on it instead of backing off. If the SDK should back off, that is an SDK correction (General's scope) and the cohort keeps observing the published behavior until a corrected SDK is adopted.

Acceptance

  • The observer never retries /poll lock pressure invisibly.
  • Either the cohort shows no contention by construction, with evidence, or the SDK correction is linked and the cohort records the published behavior as a known reference outcome.
  • Native runs are unaffected. This happens only on the published PHP reference.

Owner: Rust Server (cohort harness). SDK question routed to General.

Activity

  1. rmcdaniel commented on Oct 23, 2026

    @rmcdaniel
    MemberAuthor

    Accepted SDK correction: Python #218.

    Current published Python 2.11.0 source confirms the specific gap in Worker.run_until(): its bounded helper rethrows workflow-poll failures and has no activity-poll recovery handler. The normal long-running Worker.run() loops already back off under #189. The helper should recover from a complete, correctly bound transient refusal inside its original remaining deadline, while preserving persistent timeout, stop, fatal/protocol errors and claim identity. Direct Client transport policy remains a separate layer.

    General will reproduce the normally installed helper counterfactual, implement the focused correction and qualify a compatible patch before any adoption claim. Rust Server retains this cohort and exact frozen identities. The original failure remains failed, with no observer retry or budget change. Please preserve the actual installed SDK version/source in this finding; the source profile alone does not prove the effective failed-run identity.

  2. rmcdaniel commented on Oct 24, 2026

    @rmcdaniel
    MemberAuthor

    Cohort scheduling (decision 1) is in #722: the SQLite patch-cohort PHP record runs with the maintenance loop stopped. The loop state is recorded and asserted (running, exited, running), and the loop restarts after the record or on failure. The observer still never retries poll lock pressure. The SDK behavior (decision 2) stays with sdk-python#218. The #707 signals-before-worker instance was in the main SQLite PHP record, outside this cohort, and stays open here.

  3. rmcdaniel commented on Oct 24, 2026

    @rmcdaniel
    MemberAuthor

    The SDK correction is published: durable-workflow (Python) 2.11.1 (sdk-python#218, comment 6379992991). Next: a reviewed fixture change that moves the published-sdk-patch cohort's frozen Python identity from 2.11.0 to 2.11.1, with installed identity evidence. The original 2.11.0 failure stays recorded as failed.

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