Add HTTP-specific retry options to azure-functions-durable v2 call_http
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 45/100
Research direction
Start with DurableOrchestrationContext.call_http and the HTTP worker path in azure-functions-durable/azure/durable_functions/http/models.py and builtin.py. Trace request serialization and the polling orchestrator before comparing the .NET HttpRetryOptions semantics. Done means configured failure retries, preserved 202 polling and no-option behavior, documented usage, and tests for success, exhaustion, exclusions, limits, replay, and polling interaction.
Written by the indexing model from the issue text.
Description
Add configurable, durable HTTP failure retries to the azure-functions-durable v2 compatibility package in this repository. This is the Python v2 follow-up to Azure/azure-functions-durable-extension#1984, not a request for generic activity retry support.
Current behavior
Checked azure-functions-durable==2.0.0rc1 (azurefunctions-v2.0.0rc1):
DurableOrchestrationContext.call_http(method, uri, content=None, headers=None, token_source=None, is_raw_str=False)has no HTTP retry parameter and schedules the built-in HTTP polling sub-orchestration.DurableHttpRequestneither accepts nor serializes a retry policy or retryable-status-code list.builtin_http_activityreturns HTTP error responses rather than treating selected statuses as retryable failures.- The polling orchestrator calls activities without a retry policy and repeats only for HTTP 202 responses with a Location header.
This package executes HTTP through worker-side built-ins rather than the extension's native HTTP action. Retry support must be implemented in that worker path, not just added to a host-bound JSON field.
Acceptance Criteria
- Expose HTTP-specific retry configuration on
call_http, including first retry interval, maximum attempts, backoff coefficient, maximum retry interval, retry timeout, and retryable HTTP status codes. - Carry the configuration through the request model/serialization and apply durable retries to selected HTTP statuses and retryable transport failures.
- Define and document status-code defaults consistent with .NET
HttpRetryOptions(an omitted/empty status-code list retries 4xx/5xx responses when a retry policy is supplied). - Preserve existing behavior when retry options are omitted, and keep HTTP 202 polling distinct from failure retries.
- Add coverage for retry-then-success, exhausted attempts, excluded status codes, backoff/timeout limits, replay, and interaction with 202 polling.
- Document usage and any intentional differences from .NET HTTP retry semantics.
Related
- Original cross-language tracker: Azure/azure-functions-durable-extension#1984.
- Equivalent Node v4 work: microsoft/durabletask-js#367.
- .NET HttpRetryOptions reference implementation.
- Dominant language
- Python
- Stars
- 40
- Forks
- 33
- Avg merge
- 2d 2h
- Merged PRs (30d)
- 6
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from microsoft/durabletask-python
-
Difficulty 3/5 1-2 days Newbie friendliness 72/100
microsoft/durabletask-python#266 ·
-
Difficulty 5/5 Over a week Newbie friendliness 38/100
microsoft/durabletask-python#249 ·
-
bug Functions Parity
Difficulty 5/5 Over a week Newbie friendliness 35/100
microsoft/durabletask-python#241 · 2 comments ·
-
Difficulty 5/5 Over a week Newbie friendliness 30/100
microsoft/durabletask-python#234 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 76/100
microsoft/durabletask-python#222 ·
All issues in microsoft/durabletask-python
Similar issues
-
Add: hunch Open
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
AbdelStark/awesome-typesafe#104 ·
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
DiamondLightSource/dodal#2211 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
openml/openml-python#1749 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
sipyourdrink-ltd/bernstein#6191 ·