Problem
The Python client's ordinary request helper forwards timeout=None to HTTPX.
In HTTPX that disables timeouts, overriding the value configured by
Client(timeout=...). A stalled control request, completion or heartbeat can
therefore wait indefinitely instead of honoring the configured timeout.
Current main e02afd2 contains this path in
src/durable_workflow/client.py. Published 2.3.8 is the baseline to reproduce,
with wheel SHA256
273ed04cc36f35e6a1426933ba624a1ad8c843be05f3e1fadb07cbcaa67e0727.
This was found during cancellation recovery diagnosis.
It can cause a workflow slot to remain occupied by a pending request. It has
not been established as the cause of the earlier missed cancellation claim.
Acceptance
- Reproduce against published 2.3.8 with a real isolated socket that accepts a
request and stalls its response. Respect a configured finite timeout for
ordinary control, discovery and worker requests.
- Preserve explicit operation timeouts, including worker poll windows/grace
margins when the configured default is shorter.
- Keep retry policy, request identities, protocol 1.19 and payload behavior
unchanged. A per-attempt timeout is not an end-to-end cancellation budget.
- Run focused regression tests and normal CI, publish a patch, then verify the
exact published wheel and affected SDK behavior with published Server.
Fix this as a stable transport defect without freezing or publishing the
unfinished cooperative-cancellation feature.
Problem
The Python client's ordinary request helper forwards
timeout=Noneto HTTPX.In HTTPX that disables timeouts, overriding the value configured by
Client(timeout=...). A stalled control request, completion or heartbeat cantherefore wait indefinitely instead of honoring the configured timeout.
Current main e02afd2 contains this path in
src/durable_workflow/client.py. Published 2.3.8 is the baseline to reproduce,with wheel SHA256
273ed04cc36f35e6a1426933ba624a1ad8c843be05f3e1fadb07cbcaa67e0727.This was found during cancellation recovery diagnosis.
It can cause a workflow slot to remain occupied by a pending request. It has
not been established as the cause of the earlier missed cancellation claim.
Acceptance
request and stalls its response. Respect a configured finite timeout for
ordinary control, discovery and worker requests.
margins when the configured default is shorter.
unchanged. A per-attempt timeout is not an end-to-end cancellation budget.
exact published wheel and affected SDK behavior with published Server.
Fix this as a stable transport defect without freezing or publishing the
unfinished cooperative-cancellation feature.