Skip to content

Commit 6118a8e

Browse files
committed
Revert "Example of streamlining retries from Instance Profile Credentials"
This reverts commit e4153b3.
1 parent e4153b3 commit 6118a8e

1 file changed

Lines changed: 16 additions & 35 deletions

File tree

gems/aws-sdk-core/lib/aws-sdk-core/instance_profile_credentials.rb

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ class InstanceProfileCredentials
3636
# called with an instance of this object when AWS credentials are required and need to be refreshed.
3737
def initialize(options = {})
3838
@ec2_metadata = options.delete(:ec2_metadata) || build_ec2_metadata_client(options)
39-
@retries = options.delete(:retries) || 3
40-
@backoff = resolve_backoff(options[:backoff])
39+
4140
@no_refresh_until = nil
4241
@async_refresh = false
4342
@metrics = ['CREDENTIALS_IMDS']
@@ -53,9 +52,7 @@ def build_ec2_metadata_client(options)
5352
opts = options.merge(
5453
endpoint_mode: resolve_endpoint_mode(options),
5554
endpoint: resolve_endpoint(options),
56-
disable_imds_v1: resolve_disable_v1(options),
57-
retries: 0,
58-
backoff: 0
55+
disable_imds_v1: resolve_disable_v1(options)
5956
)
6057
if (delay = opts.delete(:delay))
6158
warn('The `:delay` option is deprecated. Use `:backoff` instead.')
@@ -97,7 +94,15 @@ def refresh
9794
return
9895
end
9996

100-
new_creds = retry_errors { Aws::Json.load(fetch_credentials) }
97+
new_creds =
98+
begin
99+
retry_json_errors { Aws::Json.load(fetch_credentials) }
100+
rescue Aws::Json::ParseError
101+
raise Aws::Errors::MetadataParserError
102+
rescue StandardError => e
103+
warn("Error retrieving instance profile credentials: #{e}")
104+
'{}'
105+
end
101106

102107
if !empty_credentials?(@credentials) && (!new_creds['AccessKeyId'] || new_creds['AccessKeyId'].empty?)
103108
# credentials are already set, but there was an error getting new credentials
@@ -120,6 +125,9 @@ def fetch_credentials
120125
metadata = @ec2_metadata.get(METADATA_PATH_BASE)
121126
profile_name = metadata.lines.first.strip
122127
@ec2_metadata.get(METADATA_PATH_BASE + profile_name)
128+
rescue StandardError => e
129+
warn("Error retrieving instance profile credentials: #{e}")
130+
'{}'
123131
end
124132

125133
def update_credentials(creds)
@@ -140,42 +148,15 @@ def ec2_metadata_disabled?
140148
ENV.fetch('AWS_EC2_METADATA_DISABLED', 'false').downcase == 'true'
141149
end
142150

143-
def resolve_backoff(backoff)
144-
case backoff
145-
when Proc then backoff
146-
when Numeric then ->(_) { Kernel.sleep(backoff) }
147-
else ->(num_failures) { Kernel.sleep(1.2**num_failures) }
148-
end
149-
end
150-
151-
def retry_errors(&_block)
151+
def retry_json_errors(&_block)
152152
attempts = 0
153-
unretryable_errors = [
154-
EC2Metadata::TokenRetrievalError,
155-
EC2Metadata::MetadataNotFoundError,
156-
EC2Metadata::RequestForbiddenError
157-
]
158-
159153
begin
160154
yield
161155
rescue Aws::Json::ParseError
162-
raise Aws::Errors::MetadataParserError unless attempts < @retries
156+
raise unless attempts < 3
163157

164-
@backoff.call(attempts)
165158
attempts += 1
166159
retry
167-
rescue *unretryable_errors => e
168-
warn("Error retrieving instance profile credentials: #{e}")
169-
'{}'
170-
rescue StandardError
171-
if attempts < @retries
172-
@backoff.call(attempts)
173-
attempts += 1
174-
retry
175-
else
176-
warn("Error retrieving instance profile credentials: #{e}")
177-
'{}'
178-
end
179160
end
180161
end
181162
end

0 commit comments

Comments
 (0)