aws-sdk-core 3.247.0 → 3.248.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/VERSION +1 -1
- data/lib/aws-sdk-core/plugins/retries/retry_quota.rb +11 -8
- data/lib/aws-sdk-core/plugins/retry_errors.rb +198 -106
- data/lib/aws-sdk-signin/client.rb +6 -8
- data/lib/aws-sdk-signin.rb +1 -1
- data/lib/aws-sdk-sso/client.rb +6 -8
- data/lib/aws-sdk-sso.rb +1 -1
- data/lib/aws-sdk-ssooidc/client.rb +6 -8
- data/lib/aws-sdk-ssooidc.rb +1 -1
- data/lib/aws-sdk-sts/client.rb +6 -8
- data/lib/aws-sdk-sts.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 23d00caf749188d02e883c0769614834df66931fa1078f4fa5726acfb6f53da1
|
|
4
|
+
data.tar.gz: da0296c298ef0420e32ded5400465b7a9f6c7c965d3d6f9d6dd3683c4002fc68
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ebf7383290e82947fa520649b08d8e781898f228f896a385c7313f48365f4ce70bdb844eb7dfd0c374686d8fb9c4a7d3be00a3c016835880599e2fea5fa2da33
|
|
7
|
+
data.tar.gz: cff380dda821d9da7cf4063bc0ef570fcf38d6d663aa32696a130d57562b96f27f4b8e4def9590c94b2e9edc21c1571aad3d408daee3a45c9018904cfd70bf33
|
data/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
Unreleased Changes
|
|
2
2
|
------------------
|
|
3
3
|
|
|
4
|
+
3.248.0 (2026-05-21)
|
|
5
|
+
------------------
|
|
6
|
+
|
|
7
|
+
* Feature - Updated Aws::STS::Client with the latest API changes.
|
|
8
|
+
|
|
9
|
+
* Feature - Updated Aws::SSOOIDC::Client with the latest API changes.
|
|
10
|
+
|
|
11
|
+
* Feature - Updated Aws::SSO::Client with the latest API changes.
|
|
12
|
+
|
|
13
|
+
* Feature - Updated Aws::Signin::Client with the latest API changes.
|
|
14
|
+
|
|
15
|
+
* Feature - Add `AWS_NEW_RETRIES_2026` environment variable to opt-in to updated `standard` retry mode with reduced backoff intervals.
|
|
16
|
+
|
|
4
17
|
3.247.0 (2026-05-13)
|
|
5
18
|
------------------
|
|
19
|
+
|
|
6
20
|
* Feature - Add YJIT & ZJIT tracking to user agent.
|
|
21
|
+
|
|
7
22
|
* Issue - Fix error messaging in SSO OIDC.
|
|
8
23
|
|
|
9
24
|
3.246.0 (2026-04-23)
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.248.0
|
|
@@ -8,9 +8,11 @@ module Aws
|
|
|
8
8
|
# Used in 'standard' and 'adaptive' retry modes.
|
|
9
9
|
class RetryQuota
|
|
10
10
|
INITIAL_RETRY_TOKENS = 500
|
|
11
|
-
RETRY_COST =
|
|
11
|
+
RETRY_COST = 14
|
|
12
|
+
LEGACY_RETRY_COST = 5 # TODO: Remove when new retries become default
|
|
12
13
|
NO_RETRY_INCREMENT = 1
|
|
13
|
-
|
|
14
|
+
THROTTLING_RETRY_COST = 5
|
|
15
|
+
TIMEOUT_RETRY_COST = 10 # TODO: Remove when new retries become default
|
|
14
16
|
|
|
15
17
|
def initialize(opts = {})
|
|
16
18
|
@mutex = Mutex.new
|
|
@@ -19,15 +21,16 @@ module Aws
|
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
# check if there is sufficient capacity to retry
|
|
22
|
-
# and return it.
|
|
24
|
+
# and return it. If there is insufficient capacity
|
|
23
25
|
# return 0
|
|
24
26
|
# @return [Integer] The amount of capacity checked out
|
|
25
27
|
def checkout_capacity(error_inspector)
|
|
26
28
|
@mutex.synchronize do
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
# TODO: Remove gate and keep only the new_retries branch
|
|
30
|
+
capacity_amount = if RetryErrors.new_retries?
|
|
31
|
+
error_inspector.throttling_error? ? THROTTLING_RETRY_COST : RETRY_COST
|
|
29
32
|
else
|
|
30
|
-
|
|
33
|
+
error_inspector.networking? ? TIMEOUT_RETRY_COST : LEGACY_RETRY_COST
|
|
31
34
|
end
|
|
32
35
|
|
|
33
36
|
# unable to acquire capacity
|
|
@@ -39,8 +42,8 @@ module Aws
|
|
|
39
42
|
end
|
|
40
43
|
|
|
41
44
|
# capacity_amount refers to the amount of capacity requested from
|
|
42
|
-
# the last retry.
|
|
43
|
-
# or unset.
|
|
45
|
+
# the last retry. It can either be RETRY_COST,
|
|
46
|
+
# THROTTLING_RETRY_COST/TIMEOUT_RETRY_COST, or unset.
|
|
44
47
|
def release(capacity_amount)
|
|
45
48
|
# Implementation note: The release() method is called for
|
|
46
49
|
# every API call. In the common case where the request is
|
|
@@ -41,32 +41,32 @@ module Aws
|
|
|
41
41
|
:retry_limit,
|
|
42
42
|
default: 3,
|
|
43
43
|
doc_type: Integer,
|
|
44
|
-
docstring:
|
|
45
|
-
The maximum number of times to retry failed requests. Only
|
|
46
|
-
~ 500 level server errors and certain ~ 400 level client errors
|
|
47
|
-
are retried. Generally, these are throttling errors, data
|
|
48
|
-
checksum errors, networking errors, timeout errors, auth errors,
|
|
49
|
-
endpoint discovery, and errors from expired credentials.
|
|
50
|
-
This option is only used in the `legacy` retry mode.
|
|
44
|
+
docstring: <<~DOCS)
|
|
45
|
+
The maximum number of times to retry failed requests. Only
|
|
46
|
+
~ 500 level server errors and certain ~ 400 level client errors
|
|
47
|
+
are retried. Generally, these are throttling errors, data
|
|
48
|
+
checksum errors, networking errors, timeout errors, auth errors,
|
|
49
|
+
endpoint discovery, and errors from expired credentials.
|
|
50
|
+
This option is only used in the `legacy` retry mode.
|
|
51
51
|
DOCS
|
|
52
52
|
|
|
53
53
|
option(
|
|
54
54
|
:retry_max_delay,
|
|
55
55
|
default: 0,
|
|
56
56
|
doc_type: Integer,
|
|
57
|
-
docstring:
|
|
58
|
-
The maximum number of seconds to delay between retries (0 for no limit)
|
|
59
|
-
used by the default backoff function. This option is only used in the
|
|
60
|
-
`legacy` retry mode.
|
|
57
|
+
docstring: <<~DOCS)
|
|
58
|
+
The maximum number of seconds to delay between retries (0 for no limit)
|
|
59
|
+
used by the default backoff function. This option is only used in the
|
|
60
|
+
`legacy` retry mode.
|
|
61
61
|
DOCS
|
|
62
62
|
|
|
63
63
|
option(
|
|
64
64
|
:retry_base_delay,
|
|
65
65
|
default: 0.3,
|
|
66
66
|
doc_type: Float,
|
|
67
|
-
docstring:
|
|
68
|
-
The base delay in seconds used by the default backoff function. This option
|
|
69
|
-
is only used in the `legacy` retry mode.
|
|
67
|
+
docstring: <<~DOCS)
|
|
68
|
+
The base delay in seconds used by the default backoff function. This option
|
|
69
|
+
is only used in the `legacy` retry mode.
|
|
70
70
|
DOCS
|
|
71
71
|
|
|
72
72
|
option(
|
|
@@ -74,45 +74,43 @@ is only used in the `legacy` retry mode.
|
|
|
74
74
|
default: :none,
|
|
75
75
|
doc_type: Symbol,
|
|
76
76
|
rbs_type: '(:none | :equal | :full | ^(Integer) -> Integer)',
|
|
77
|
-
docstring:
|
|
78
|
-
A delay randomiser function used by the default backoff function.
|
|
79
|
-
Some predefined functions can be referenced by name - :none, :equal, :full,
|
|
80
|
-
otherwise a Proc that takes and returns a number. This option is only used
|
|
81
|
-
in the `legacy` retry mode.
|
|
77
|
+
docstring: <<~DOCS)
|
|
78
|
+
A delay randomiser function used by the default backoff function.
|
|
79
|
+
Some predefined functions can be referenced by name - :none, :equal, :full,
|
|
80
|
+
otherwise a Proc that takes and returns a number. This option is only used
|
|
81
|
+
in the `legacy` retry mode.
|
|
82
82
|
|
|
83
|
-
@see https://www.awsarchitectureblog.com/2015/03/backoff.html
|
|
83
|
+
@see https://www.awsarchitectureblog.com/2015/03/backoff.html
|
|
84
84
|
DOCS
|
|
85
85
|
|
|
86
86
|
option(
|
|
87
87
|
:retry_backoff,
|
|
88
88
|
default: DEFAULT_BACKOFF,
|
|
89
89
|
doc_type: Proc,
|
|
90
|
-
docstring:
|
|
91
|
-
A proc or lambda used for backoff. Defaults to 2**retries * retry_base_delay.
|
|
92
|
-
This option is only used in the `legacy` retry mode.
|
|
90
|
+
docstring: <<~DOCS)
|
|
91
|
+
A proc or lambda used for backoff. Defaults to 2**retries * retry_base_delay.
|
|
92
|
+
This option is only used in the `legacy` retry mode.
|
|
93
93
|
DOCS
|
|
94
94
|
|
|
95
95
|
# END LEGACY OPTIONS
|
|
96
96
|
|
|
97
97
|
option(
|
|
98
98
|
:retry_mode,
|
|
99
|
-
default: 'legacy',
|
|
99
|
+
default: 'legacy', # TODO: Change to 'standard' when new retries become default
|
|
100
100
|
doc_type: String,
|
|
101
101
|
rbs_type: '("legacy" | "standard" | "adaptive")',
|
|
102
|
-
docstring:
|
|
103
|
-
Specifies which retry algorithm to use. Values are:
|
|
102
|
+
docstring: <<~DOCS) do |cfg|
|
|
103
|
+
Specifies which retry algorithm to use. Values are:
|
|
104
104
|
|
|
105
|
-
* `legacy` - The pre-existing retry behavior.
|
|
106
|
-
|
|
105
|
+
* `legacy` - The pre-existing retry behavior. This is the default
|
|
106
|
+
value if no retry mode is provided.
|
|
107
107
|
|
|
108
|
-
* `standard` - A standardized set of retry rules across the AWS SDKs.
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
* `standard` - A standardized set of retry rules across the AWS SDKs.
|
|
109
|
+
This includes support for retry quotas, which limit the number of
|
|
110
|
+
unsuccessful retries a client can make.
|
|
111
111
|
|
|
112
|
-
* `adaptive` -
|
|
113
|
-
|
|
114
|
-
throttling. This is a provisional mode that may change behavior
|
|
115
|
-
in the future.
|
|
112
|
+
* `adaptive` - A retry mode that includes all the functionality of
|
|
113
|
+
`standard` mode along with automatic client side throttling.
|
|
116
114
|
DOCS
|
|
117
115
|
resolve_retry_mode(cfg)
|
|
118
116
|
end
|
|
@@ -121,11 +119,11 @@ Specifies which retry algorithm to use. Values are:
|
|
|
121
119
|
:max_attempts,
|
|
122
120
|
default: 3,
|
|
123
121
|
doc_type: Integer,
|
|
124
|
-
docstring:
|
|
125
|
-
An integer representing the maximum number attempts that will be made for
|
|
126
|
-
a single request, including the initial attempt. For example,
|
|
127
|
-
setting this value to 5 will result in a request being retried up to
|
|
128
|
-
4 times. Used in `standard` and `adaptive` retry modes.
|
|
122
|
+
docstring: <<~DOCS) do |cfg|
|
|
123
|
+
An integer representing the maximum number attempts that will be made for
|
|
124
|
+
a single request, including the initial attempt. For example,
|
|
125
|
+
setting this value to 5 will result in a request being retried up to
|
|
126
|
+
4 times. Used in `standard` and `adaptive` retry modes.
|
|
129
127
|
DOCS
|
|
130
128
|
resolve_max_attempts(cfg)
|
|
131
129
|
end
|
|
@@ -134,11 +132,11 @@ setting this value to 5 will result in a request being retried up to
|
|
|
134
132
|
:adaptive_retry_wait_to_fill,
|
|
135
133
|
default: true,
|
|
136
134
|
doc_type: 'Boolean',
|
|
137
|
-
docstring:
|
|
138
|
-
Used only in `adaptive` retry mode. When true, the request will sleep
|
|
139
|
-
until there is sufficent client side capacity to retry the request.
|
|
140
|
-
When false, the request will raise a `RetryCapacityNotAvailableError` and will
|
|
141
|
-
not retry instead of sleeping.
|
|
135
|
+
docstring: <<~DOCS) do |cfg|
|
|
136
|
+
Used only in `adaptive` retry mode. When true, the request will sleep
|
|
137
|
+
until there is sufficent client side capacity to retry the request.
|
|
138
|
+
When false, the request will raise a `RetryCapacityNotAvailableError` and will
|
|
139
|
+
not retry instead of sleeping.
|
|
142
140
|
DOCS
|
|
143
141
|
resolve_adaptive_retry_wait_to_fill(cfg)
|
|
144
142
|
end
|
|
@@ -147,10 +145,10 @@ not retry instead of sleeping.
|
|
|
147
145
|
:correct_clock_skew,
|
|
148
146
|
default: true,
|
|
149
147
|
doc_type: 'Boolean',
|
|
150
|
-
docstring:
|
|
151
|
-
Used only in `standard` and adaptive retry modes. Specifies whether to apply
|
|
152
|
-
a clock skew correction and retry requests with skewed client clocks.
|
|
153
|
-
|
|
148
|
+
docstring: <<~DOCS) do |cfg|
|
|
149
|
+
Used only in `standard` and `adaptive` retry modes. Specifies whether to apply
|
|
150
|
+
a clock skew correction and retry requests with skewed client clocks.
|
|
151
|
+
DOCS
|
|
154
152
|
resolve_correct_clock_skew(cfg)
|
|
155
153
|
end
|
|
156
154
|
|
|
@@ -163,71 +161,106 @@ a clock skew correction and retry requests with skewed client clocks.
|
|
|
163
161
|
# @api private undocumented
|
|
164
162
|
option(:clock_skew) { Retries::ClockSkew.new }
|
|
165
163
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
164
|
+
DYNAMODB_SERVICES = Set['DynamoDB', 'DynamoDB Streams'].freeze
|
|
165
|
+
|
|
166
|
+
class << self
|
|
167
|
+
# TODO: Remove this gate and hardcode new retry behavior once
|
|
168
|
+
# AWS_NEW_RETRIES_2026 is enabled by default, which includes:
|
|
169
|
+
# - Default retry_mode to 'standard'
|
|
170
|
+
# - Default max_attempts to 4 for DynamoDB
|
|
171
|
+
# - Remove the old retries branch in Handler#call
|
|
172
|
+
# - Remove the old retries branch in #exponential_backoff
|
|
173
|
+
# - Remove LEGACY_RETRY_COST and TIMEOUT_RETRY_COST from RetryQuota
|
|
174
|
+
def new_retries?
|
|
175
|
+
ENV.fetch('AWS_NEW_RETRIES_2026', 'false').downcase == 'true'
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def resolve_retry_mode(cfg)
|
|
179
|
+
default_mode_value =
|
|
180
|
+
if cfg.respond_to?(:defaults_mode_config_resolver)
|
|
181
|
+
cfg.defaults_mode_config_resolver.resolve(:retry_mode)
|
|
182
|
+
end
|
|
171
183
|
|
|
172
184
|
value = ENV['AWS_RETRY_MODE'] ||
|
|
173
185
|
Aws.shared_config.retry_mode(profile: cfg.profile) ||
|
|
174
186
|
default_mode_value ||
|
|
175
|
-
'legacy'
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
187
|
+
(new_retries? ? 'standard' : 'legacy') # TODO: default to 'standard' when new retries become default
|
|
188
|
+
# Raise if provided value is not one of the retry modes
|
|
189
|
+
if value != 'legacy' && value != 'standard' && value != 'adaptive'
|
|
190
|
+
raise ArgumentError,
|
|
191
|
+
'Must provide either `legacy`, `standard`, or `adaptive` for '\
|
|
192
|
+
'retry_mode profile option or for ENV[\'AWS_RETRY_MODE\']'
|
|
193
|
+
end
|
|
194
|
+
value
|
|
181
195
|
end
|
|
182
|
-
value
|
|
183
|
-
end
|
|
184
196
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
197
|
+
def resolve_max_attempts(cfg)
|
|
198
|
+
value = (ENV['AWS_MAX_ATTEMPTS']) ||
|
|
199
|
+
Aws.shared_config.max_attempts(profile: cfg.profile)
|
|
200
|
+
if value
|
|
201
|
+
value = value.to_i
|
|
202
|
+
# Raise if provided value is not a positive integer
|
|
203
|
+
if value <= 0
|
|
204
|
+
raise ArgumentError,
|
|
205
|
+
'Must provide a positive integer for max_attempts profile '\
|
|
206
|
+
'option or for ENV[\'AWS_MAX_ATTEMPTS\']'
|
|
207
|
+
end
|
|
208
|
+
return value
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
default_max_attempts(cfg)
|
|
195
212
|
end
|
|
196
|
-
value
|
|
197
|
-
end
|
|
198
213
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
214
|
+
def default_max_attempts(cfg)
|
|
215
|
+
# TODO: Remove gate and keep only the new retries branch
|
|
216
|
+
return 3 unless new_retries?
|
|
217
|
+
|
|
218
|
+
service_id = cfg.api.metadata['serviceId'] if cfg.respond_to?(:api)
|
|
219
|
+
DYNAMODB_SERVICES.include?(service_id) ? 4 : 3
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def resolve_adaptive_retry_wait_to_fill(cfg)
|
|
223
|
+
value = ENV['AWS_ADAPTIVE_RETRY_WAIT_TO_FILL'] ||
|
|
224
|
+
Aws.shared_config.adaptive_retry_wait_to_fill(profile: cfg.profile) ||
|
|
225
|
+
'true'
|
|
226
|
+
# Raise if provided value is not true or false
|
|
227
|
+
if value != 'true' && value != 'false'
|
|
228
|
+
raise ArgumentError,
|
|
229
|
+
'Must provide either `true` or `false` for '\
|
|
230
|
+
'adaptive_retry_wait_to_fill profile option or for '\
|
|
231
|
+
'ENV[\'AWS_ADAPTIVE_RETRY_WAIT_TO_FILL\']'
|
|
232
|
+
end
|
|
233
|
+
value == 'true'
|
|
209
234
|
end
|
|
210
|
-
value == 'true'
|
|
211
|
-
end
|
|
212
235
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
236
|
+
def resolve_correct_clock_skew(cfg)
|
|
237
|
+
value = ENV['AWS_CORRECT_CLOCK_SKEW'] ||
|
|
238
|
+
Aws.shared_config.correct_clock_skew(profile: cfg.profile) ||
|
|
239
|
+
'true'
|
|
240
|
+
# Raise if provided value is not true or false
|
|
241
|
+
if value != 'true' && value != 'false'
|
|
242
|
+
raise ArgumentError,
|
|
243
|
+
'Must provide either `true` or `false` for '\
|
|
244
|
+
'correct_clock_skew profile option or for '\
|
|
245
|
+
'ENV[\'AWS_CORRECT_CLOCK_SKEW\']'
|
|
246
|
+
end
|
|
247
|
+
value == 'true'
|
|
223
248
|
end
|
|
224
|
-
value == 'true'
|
|
225
249
|
end
|
|
226
250
|
|
|
227
251
|
class Handler < Seahorse::Client::Handler
|
|
228
252
|
# Max backoff (in seconds)
|
|
229
253
|
MAX_BACKOFF = 20
|
|
230
254
|
|
|
255
|
+
# TODO: remove once longPoll trait is added to models
|
|
256
|
+
# Hard-coded combination of services and operations as having the
|
|
257
|
+
# longPoll trait. To be removed when trait is enabled.
|
|
258
|
+
LONG_POLLING_OPERATIONS = {
|
|
259
|
+
'SQS' => Set[:receive_message],
|
|
260
|
+
'SFN' => Set[:get_activity_task],
|
|
261
|
+
'SWF' => Set[:poll_for_activity_task, :poll_for_decision_task]
|
|
262
|
+
}.freeze
|
|
263
|
+
|
|
231
264
|
def call(context)
|
|
232
265
|
context.metadata[:retries] ||= {}
|
|
233
266
|
config = context.config
|
|
@@ -260,17 +293,34 @@ a clock skew correction and retry requests with skewed client clocks.
|
|
|
260
293
|
|
|
261
294
|
return response if context.retries >= config.max_attempts - 1
|
|
262
295
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
296
|
+
capacity_amount = config.retry_quota.checkout_capacity(error_inspector)
|
|
297
|
+
context.metadata[:retries][:capacity_amount] = capacity_amount
|
|
298
|
+
|
|
299
|
+
# TODO: Remove gate and keep only the new retries branch
|
|
300
|
+
if new_retries?
|
|
301
|
+
return response if capacity_amount <= 0 && !long_polling_operation?(context)
|
|
302
|
+
|
|
303
|
+
service_id = context.config.api.metadata['serviceId']
|
|
304
|
+
delay = backoff(context, error_inspector, service_id)
|
|
305
|
+
Kernel.sleep(delay)
|
|
306
|
+
|
|
307
|
+
return response if capacity_amount <= 0
|
|
308
|
+
else
|
|
309
|
+
return response unless capacity_amount > 0
|
|
310
|
+
|
|
311
|
+
delay = exponential_backoff(context.retries)
|
|
312
|
+
Kernel.sleep(delay)
|
|
313
|
+
end
|
|
266
314
|
|
|
267
|
-
delay = exponential_backoff(context.retries)
|
|
268
|
-
Kernel.sleep(delay)
|
|
269
315
|
retry_request(context, error_inspector)
|
|
270
316
|
end
|
|
271
317
|
|
|
272
318
|
private
|
|
273
319
|
|
|
320
|
+
def new_retries?
|
|
321
|
+
RetryErrors.new_retries?
|
|
322
|
+
end
|
|
323
|
+
|
|
274
324
|
def with_metric(retry_mode, &block)
|
|
275
325
|
Aws::Plugins::UserAgent.metric("RETRY_MODE_#{retry_mode.upcase}", &block)
|
|
276
326
|
end
|
|
@@ -311,9 +361,51 @@ a clock skew correction and retry requests with skewed client clocks.
|
|
|
311
361
|
context.http_response.body.respond_to?(:truncate)
|
|
312
362
|
end
|
|
313
363
|
|
|
314
|
-
def
|
|
315
|
-
|
|
316
|
-
|
|
364
|
+
def long_polling_operation?(context)
|
|
365
|
+
return true if context.operation['longPoll']
|
|
366
|
+
|
|
367
|
+
# Hard-coded failback until the trait is enabled
|
|
368
|
+
service_id = context.config.api.metadata['serviceId']
|
|
369
|
+
LONG_POLLING_OPERATIONS[service_id]&.include?(context.operation_name)
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
def backoff(context, error_inspector, service_id)
|
|
373
|
+
exp_backoff = exponential_backoff(context.retries, error_inspector, service_id)
|
|
374
|
+
retry_after = parse_retry_after(context)
|
|
375
|
+
return exp_backoff unless retry_after
|
|
376
|
+
|
|
377
|
+
backoff_duration = [retry_after, exp_backoff].max
|
|
378
|
+
[backoff_duration, exp_backoff + 5].min
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
# TODO: Remove gate, remove default nil params, keep only new retries branch
|
|
382
|
+
def exponential_backoff(retries, error_inspector = nil, service_id = nil)
|
|
383
|
+
if new_retries?
|
|
384
|
+
backoff_scalar = if error_inspector.throttling_error?
|
|
385
|
+
1
|
|
386
|
+
elsif DYNAMODB_SERVICES.include?(service_id)
|
|
387
|
+
0.025
|
|
388
|
+
else
|
|
389
|
+
0.05
|
|
390
|
+
end
|
|
391
|
+
Kernel.rand * [backoff_scalar * 2**retries, MAX_BACKOFF].min
|
|
392
|
+
else
|
|
393
|
+
[Kernel.rand * 2**retries, MAX_BACKOFF].min
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
def parse_retry_after(context)
|
|
398
|
+
retry_after = context.http_response.headers['x-amz-retry-after']
|
|
399
|
+
return unless retry_after
|
|
400
|
+
|
|
401
|
+
unless retry_after.match?(/\A\d+\z/)
|
|
402
|
+
context.config.logger&.debug(
|
|
403
|
+
"Failed to parse x-amz-retry-after header value: #{retry_after.inspect}"
|
|
404
|
+
)
|
|
405
|
+
return
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
retry_after.to_i / 1000.0
|
|
317
409
|
end
|
|
318
410
|
|
|
319
411
|
def retry_request(context, error)
|
|
@@ -331,7 +423,7 @@ a clock skew correction and retry requests with skewed client clocks.
|
|
|
331
423
|
|
|
332
424
|
def add_retry_headers(context)
|
|
333
425
|
request_pairs = {
|
|
334
|
-
'attempt' => context.retries,
|
|
426
|
+
'attempt' => context.retries + 1,
|
|
335
427
|
'max' => context.config.max_attempts
|
|
336
428
|
}
|
|
337
429
|
if (ttl = compute_request_ttl(context))
|
|
@@ -199,7 +199,7 @@ module Aws::Signin
|
|
|
199
199
|
# the required types.
|
|
200
200
|
#
|
|
201
201
|
# @option options [Boolean] :correct_clock_skew (true)
|
|
202
|
-
# Used only in `standard` and adaptive retry modes. Specifies whether to apply
|
|
202
|
+
# Used only in `standard` and `adaptive` retry modes. Specifies whether to apply
|
|
203
203
|
# a clock skew correction and retry requests with skewed client clocks.
|
|
204
204
|
#
|
|
205
205
|
# @option options [String] :defaults_mode ("legacy")
|
|
@@ -323,17 +323,15 @@ module Aws::Signin
|
|
|
323
323
|
# @option options [String] :retry_mode ("legacy")
|
|
324
324
|
# Specifies which retry algorithm to use. Values are:
|
|
325
325
|
#
|
|
326
|
-
# * `legacy` - The pre-existing retry behavior.
|
|
327
|
-
# no retry mode is provided.
|
|
326
|
+
# * `legacy` - The pre-existing retry behavior. This is the default
|
|
327
|
+
# value if no retry mode is provided.
|
|
328
328
|
#
|
|
329
329
|
# * `standard` - A standardized set of retry rules across the AWS SDKs.
|
|
330
330
|
# This includes support for retry quotas, which limit the number of
|
|
331
331
|
# unsuccessful retries a client can make.
|
|
332
332
|
#
|
|
333
|
-
# * `adaptive` -
|
|
334
|
-
#
|
|
335
|
-
# throttling. This is a provisional mode that may change behavior
|
|
336
|
-
# in the future.
|
|
333
|
+
# * `adaptive` - A retry mode that includes all the functionality of
|
|
334
|
+
# `standard` mode along with automatic client side throttling.
|
|
337
335
|
#
|
|
338
336
|
# @option options [String] :sdk_ua_app_id
|
|
339
337
|
# A unique and opaque application ID that is appended to the
|
|
@@ -579,7 +577,7 @@ module Aws::Signin
|
|
|
579
577
|
tracer: tracer
|
|
580
578
|
)
|
|
581
579
|
context[:gem_name] = 'aws-sdk-core'
|
|
582
|
-
context[:gem_version] = '3.
|
|
580
|
+
context[:gem_version] = '3.248.0'
|
|
583
581
|
Seahorse::Client::Request.new(handlers, context)
|
|
584
582
|
end
|
|
585
583
|
|
data/lib/aws-sdk-signin.rb
CHANGED
data/lib/aws-sdk-sso/client.rb
CHANGED
|
@@ -199,7 +199,7 @@ module Aws::SSO
|
|
|
199
199
|
# the required types.
|
|
200
200
|
#
|
|
201
201
|
# @option options [Boolean] :correct_clock_skew (true)
|
|
202
|
-
# Used only in `standard` and adaptive retry modes. Specifies whether to apply
|
|
202
|
+
# Used only in `standard` and `adaptive` retry modes. Specifies whether to apply
|
|
203
203
|
# a clock skew correction and retry requests with skewed client clocks.
|
|
204
204
|
#
|
|
205
205
|
# @option options [String] :defaults_mode ("legacy")
|
|
@@ -323,17 +323,15 @@ module Aws::SSO
|
|
|
323
323
|
# @option options [String] :retry_mode ("legacy")
|
|
324
324
|
# Specifies which retry algorithm to use. Values are:
|
|
325
325
|
#
|
|
326
|
-
# * `legacy` - The pre-existing retry behavior.
|
|
327
|
-
# no retry mode is provided.
|
|
326
|
+
# * `legacy` - The pre-existing retry behavior. This is the default
|
|
327
|
+
# value if no retry mode is provided.
|
|
328
328
|
#
|
|
329
329
|
# * `standard` - A standardized set of retry rules across the AWS SDKs.
|
|
330
330
|
# This includes support for retry quotas, which limit the number of
|
|
331
331
|
# unsuccessful retries a client can make.
|
|
332
332
|
#
|
|
333
|
-
# * `adaptive` -
|
|
334
|
-
#
|
|
335
|
-
# throttling. This is a provisional mode that may change behavior
|
|
336
|
-
# in the future.
|
|
333
|
+
# * `adaptive` - A retry mode that includes all the functionality of
|
|
334
|
+
# `standard` mode along with automatic client side throttling.
|
|
337
335
|
#
|
|
338
336
|
# @option options [String] :sdk_ua_app_id
|
|
339
337
|
# A unique and opaque application ID that is appended to the
|
|
@@ -698,7 +696,7 @@ module Aws::SSO
|
|
|
698
696
|
tracer: tracer
|
|
699
697
|
)
|
|
700
698
|
context[:gem_name] = 'aws-sdk-core'
|
|
701
|
-
context[:gem_version] = '3.
|
|
699
|
+
context[:gem_version] = '3.248.0'
|
|
702
700
|
Seahorse::Client::Request.new(handlers, context)
|
|
703
701
|
end
|
|
704
702
|
|
data/lib/aws-sdk-sso.rb
CHANGED
|
@@ -199,7 +199,7 @@ module Aws::SSOOIDC
|
|
|
199
199
|
# the required types.
|
|
200
200
|
#
|
|
201
201
|
# @option options [Boolean] :correct_clock_skew (true)
|
|
202
|
-
# Used only in `standard` and adaptive retry modes. Specifies whether to apply
|
|
202
|
+
# Used only in `standard` and `adaptive` retry modes. Specifies whether to apply
|
|
203
203
|
# a clock skew correction and retry requests with skewed client clocks.
|
|
204
204
|
#
|
|
205
205
|
# @option options [String] :defaults_mode ("legacy")
|
|
@@ -323,17 +323,15 @@ module Aws::SSOOIDC
|
|
|
323
323
|
# @option options [String] :retry_mode ("legacy")
|
|
324
324
|
# Specifies which retry algorithm to use. Values are:
|
|
325
325
|
#
|
|
326
|
-
# * `legacy` - The pre-existing retry behavior.
|
|
327
|
-
# no retry mode is provided.
|
|
326
|
+
# * `legacy` - The pre-existing retry behavior. This is the default
|
|
327
|
+
# value if no retry mode is provided.
|
|
328
328
|
#
|
|
329
329
|
# * `standard` - A standardized set of retry rules across the AWS SDKs.
|
|
330
330
|
# This includes support for retry quotas, which limit the number of
|
|
331
331
|
# unsuccessful retries a client can make.
|
|
332
332
|
#
|
|
333
|
-
# * `adaptive` -
|
|
334
|
-
#
|
|
335
|
-
# throttling. This is a provisional mode that may change behavior
|
|
336
|
-
# in the future.
|
|
333
|
+
# * `adaptive` - A retry mode that includes all the functionality of
|
|
334
|
+
# `standard` mode along with automatic client side throttling.
|
|
337
335
|
#
|
|
338
336
|
# @option options [String] :sdk_ua_app_id
|
|
339
337
|
# A unique and opaque application ID that is appended to the
|
|
@@ -1081,7 +1079,7 @@ module Aws::SSOOIDC
|
|
|
1081
1079
|
tracer: tracer
|
|
1082
1080
|
)
|
|
1083
1081
|
context[:gem_name] = 'aws-sdk-core'
|
|
1084
|
-
context[:gem_version] = '3.
|
|
1082
|
+
context[:gem_version] = '3.248.0'
|
|
1085
1083
|
Seahorse::Client::Request.new(handlers, context)
|
|
1086
1084
|
end
|
|
1087
1085
|
|
data/lib/aws-sdk-ssooidc.rb
CHANGED
data/lib/aws-sdk-sts/client.rb
CHANGED
|
@@ -201,7 +201,7 @@ module Aws::STS
|
|
|
201
201
|
# the required types.
|
|
202
202
|
#
|
|
203
203
|
# @option options [Boolean] :correct_clock_skew (true)
|
|
204
|
-
# Used only in `standard` and adaptive retry modes. Specifies whether to apply
|
|
204
|
+
# Used only in `standard` and `adaptive` retry modes. Specifies whether to apply
|
|
205
205
|
# a clock skew correction and retry requests with skewed client clocks.
|
|
206
206
|
#
|
|
207
207
|
# @option options [String] :defaults_mode ("legacy")
|
|
@@ -325,17 +325,15 @@ module Aws::STS
|
|
|
325
325
|
# @option options [String] :retry_mode ("legacy")
|
|
326
326
|
# Specifies which retry algorithm to use. Values are:
|
|
327
327
|
#
|
|
328
|
-
# * `legacy` - The pre-existing retry behavior.
|
|
329
|
-
# no retry mode is provided.
|
|
328
|
+
# * `legacy` - The pre-existing retry behavior. This is the default
|
|
329
|
+
# value if no retry mode is provided.
|
|
330
330
|
#
|
|
331
331
|
# * `standard` - A standardized set of retry rules across the AWS SDKs.
|
|
332
332
|
# This includes support for retry quotas, which limit the number of
|
|
333
333
|
# unsuccessful retries a client can make.
|
|
334
334
|
#
|
|
335
|
-
# * `adaptive` -
|
|
336
|
-
#
|
|
337
|
-
# throttling. This is a provisional mode that may change behavior
|
|
338
|
-
# in the future.
|
|
335
|
+
# * `adaptive` - A retry mode that includes all the functionality of
|
|
336
|
+
# `standard` mode along with automatic client side throttling.
|
|
339
337
|
#
|
|
340
338
|
# @option options [String] :sdk_ua_app_id
|
|
341
339
|
# A unique and opaque application ID that is appended to the
|
|
@@ -2725,7 +2723,7 @@ module Aws::STS
|
|
|
2725
2723
|
tracer: tracer
|
|
2726
2724
|
)
|
|
2727
2725
|
context[:gem_name] = 'aws-sdk-core'
|
|
2728
|
-
context[:gem_version] = '3.
|
|
2726
|
+
context[:gem_version] = '3.248.0'
|
|
2729
2727
|
Seahorse::Client::Request.new(handlers, context)
|
|
2730
2728
|
end
|
|
2731
2729
|
|
data/lib/aws-sdk-sts.rb
CHANGED