aws / aws/aws-sdk-net

Announcement: Updated default retry behavior (2026)

Open
#4,411 0 comments 0 reactions 0 assignees View on GitHub
Announcement
Dominant language
C#
Stars
140
Forks
891
Avg merge
21h 51m
Merged PRs (30d)
10

Description

> This issue tracks the 2026 retry updates for AWS SDK for .NET 4.x. See the [announcement blog post](https://aws.amazon.com/blogs/developer/announcing-updated-retry-behavior-for-aws-sdks-and-tools/) for the full story across all AWS SDKs, including how to tell if you are affected.

## Status

|||
|-|-|
|**Opt-in available in**|`AWSSDK.Core` version `4.0.4.0` and later|
|**Opt-in flag**|`AWS_NEW_RETRIES_2026=true`|
|**Default rollout**|No sooner than November 2026|

## What changed

When you set `AWS_NEW_RETRIES_2026=true`, the retry defaults within `standard` mode update. The retry mode itself does not change.

If you have explicitly configured max attempts or backoff, your value takes precedence for that setting.

|Setting|Before|After|
|-|-|-|
|Transient (non-throttling) base delay|1,000 ms|**50 ms**|
|Throttling base delay|1,000 ms|**1,000 ms (unchanged)**|
|Max attempts|3|**3 (unchanged)**|
|Transient retry quota cost|5 tokens|**14 tokens**|
|**DynamoDB and DynamoDB Streams**|||
|Transient (non-throttling) base delay|1,000 ms|**25 ms**|
|Throttling base delay|1,000 ms|**1,000 ms (unchanged)**|
|Max attempts|10|**4**|

> DynamoDB defaults use a shorter base delay to match its low-latency profile. The additional attempt keeps the last retry's maximum backoff comparable to the general default.

Transient errors (such as 500s and connection resets) now use a much shorter backoff than throttling errors (where the service asks you to slow down). For details on backoff timing, error classification, and the retry quota, see [Retry behavior in the AWS SDKs](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html#how-retries-work). For retry mode selection and configuration options, see [Retry behavior in the AWS SDKs](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html#configuring-retries).

## How to opt in

Update to `AWSSDK.Core` version `4.0.4.0` or later, then set the environment variable:

```bash
export AWS_NEW_RETRIES_2026=true
```

PowerShell:

```powershell
$env:AWS_NEW_RETRIES_2026 = "true"
```

Windows CMD:

```cmd
set AWS_NEW_RETRIES_2026=true
```

## How to revert

During the opt-in period, remove the environment variable:

```bash
unset AWS_NEW_RETRIES_2026
```

After the default rollout (no sooner than November 2026), the `AWS_NEW_RETRIES_2026` flag will be removed. A full revert to the previous behavior is not available because this SDK does not support `legacy` retry mode. You can override some individual settings:

|Setting|Can revert?|How|
|-|-|-|
|Max attempts|Yes|Set `AWS_MAX_ATTEMPTS` or configure in code.|
|Base backoff delay|No|Not configurable.|
|Per-error-type backoff split|No|Not configurable.|
|Retry quota token costs|No|Not configurable.|
|Long-polling backoff on depleted quota|No|Not configurable.|

```csharp
using Amazon.DynamoDBv2;

var client = new AmazonDynamoDBClient(
new AmazonDynamoDBConfig
{
MaxErrorRetry = 10
});
```

If full revert is a concern for your use case, please let us know in this issue.

## Where you might notice a difference

For most workloads, the change is invisible or strictly better. Transient errors recover faster because the base delay is significantly shorter.

* **Retry quota activates sooner for transient errors.** Each transient retry costs 14 tokens (previously 5 for most errors). During sustained transient failures (such as 500s and connection resets), the retry quota triggers at a lower failure rate than the previous version of standard mode. Throttling retries cost 5 tokens.
* **Long-polling operations now back off when the retry quota is depleted.** Operations like `SQS.ReceiveMessage` apply a backoff delay before returning an error, even when retries are blocked. Without this, polling loops tighten during outages, spiking client CPU usage and generating additional load that can delay recovery. For details, see [long-polling operations](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html#long-polling-operations).

## Overriding specific settings

You do not have to accept all changes as a bundle. If you opt in but want to keep a specific previous value, set it explicitly. Precedence applies per setting.

For example, to use the new backoff timing but keep a higher DynamoDB max attempts:

```csharp
using Amazon.DynamoDBv2;

var client = new AmazonDynamoDBClient(
new AmazonDynamoDBConfig
{
MaxErrorRetry = 9
});
```

For the full list of configurable settings and their precedence, see [Retry behavior in the AWS SDKs](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html#configuring-retries).

## Feedback

If you encounter unexpected behavior or have questions, comment on this issue. Your feedback during the opt-in period directly shapes when and how we make this the default.

Contributor guide

Open the contributing guide

Research direction

No source file or test is identified. Start by reviewing the AWSSDK.Core 4.0.4.0 retry configuration and the documented AWS_NEW_RETRIES_2026 opt-in behavior; done would require a specific documentation or implementation task, which this tracking announcement does not define.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, csharp
Domain
cloud
Issue type
Documentation
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.