Skip to content

Add HTTP-specific retry options to durable-functions v4 callHttp #367

Description

@YunchuWang

Add configurable, durable HTTP failure retries to the durable-functions v4 provider in packages/azure-functions-durable. This is the Node v4 follow-up to Azure/azure-functions-durable-extension#1984; HTTP 202 polling and generic activity retry APIs do not provide this capability today.

Current behavior

Checked durable-functions@4.0.0-beta.1 and main at 254d9c1c8bac93ef6bb29f6bb79204bab09afa1b:

  • CallHttpOptions has no HTTP retry policy or retryable-status-code selection.
  • callHttp() builds a request and schedules the built-in polling sub-orchestration without retry options.
  • The built-in HTTP path schedules activities without a retry policy and repeats only for HTTP 202 responses. Responses such as 429, 500, and 503 are returned rather than retried.

Unlike the v3 SDK, v4 executes HTTP in worker-side built-ins. Forwarding a field to the extension's existing HTTP action is therefore insufficient; the worker implementation must apply the policy.

Acceptance Criteria

  • Expose HTTP-specific retry configuration on callHttp, including first retry interval, maximum attempts, backoff coefficient, maximum retry interval, retry timeout, and retryable HTTP status codes.
  • Carry the configuration through the request payload and apply it through durable scheduling in the built-in HTTP path, including 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

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