Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build_tools/services.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ class ServiceEnumerator
MANIFEST_PATH = File.expand_path('../../services.json', __FILE__)

# Minimum `aws-sdk-core` version for new gem builds
MINIMUM_CORE_VERSION = "3.247.0"
MINIMUM_CORE_VERSION = "3.248.0"

# Minimum `aws-sdk-core` version for new S3 gem builds
MINIMUM_CORE_VERSION_S3 = "3.247.0"
MINIMUM_CORE_VERSION_S3 = "3.248.0"

EVENTSTREAM_PLUGIN = "Aws::Plugins::EventStreamConfiguration"

Expand Down
4 changes: 4 additions & 0 deletions gems/aws-sdk-core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
Unreleased Changes
------------------

* Feature - Add `AWS_NEW_RETRIES_2026` environment variable to opt-in to updated `standard` retry mode with reduced backoff intervals.
Comment thread
richardwang1124 marked this conversation as resolved.

3.247.0 (2026-05-13)
------------------

* Feature - Add YJIT & ZJIT tracking to user agent.

* Issue - Fix error messaging in SSO OIDC.

3.246.0 (2026-04-23)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ module Retries
# Used in 'standard' and 'adaptive' retry modes.
class RetryQuota
INITIAL_RETRY_TOKENS = 500
RETRY_COST = 5
RETRY_COST = 14
LEGACY_RETRY_COST = 5 # TODO: Remove when new retries become default
NO_RETRY_INCREMENT = 1
TIMEOUT_RETRY_COST = 10
THROTTLING_RETRY_COST = 5
TIMEOUT_RETRY_COST = 10 # TODO: Remove when new retries become default

def initialize(opts = {})
@mutex = Mutex.new
Expand All @@ -19,15 +21,16 @@ def initialize(opts = {})
end

# check if there is sufficient capacity to retry
# and return it. If there is insufficient capacity
# and return it. If there is insufficient capacity
# return 0
# @return [Integer] The amount of capacity checked out
def checkout_capacity(error_inspector)
@mutex.synchronize do
capacity_amount = if error_inspector.networking?
TIMEOUT_RETRY_COST
# TODO: Remove gate and keep only the new_retries branch
capacity_amount = if RetryErrors.new_retries?
error_inspector.throttling_error? ? THROTTLING_RETRY_COST : RETRY_COST
else
RETRY_COST
error_inspector.networking? ? TIMEOUT_RETRY_COST : LEGACY_RETRY_COST
end

# unable to acquire capacity
Expand All @@ -39,8 +42,8 @@ def checkout_capacity(error_inspector)
end

# capacity_amount refers to the amount of capacity requested from
# the last retry. It can either be RETRY_COST, TIMEOUT_RETRY_COST,
# or unset.
# the last retry. It can either be RETRY_COST,
# THROTTLING_RETRY_COST/TIMEOUT_RETRY_COST, or unset.
def release(capacity_amount)
# Implementation note: The release() method is called for
# every API call. In the common case where the request is
Expand Down
Loading
Loading