Class: Aws::Plugins::RetryErrors::ErrorInspector Private

Inherits:
Object
  • Object
show all
Defined in:
lib/aws-sdk-core/plugins/retry_errors.rb

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Constant Summary collapse

EXPIRED_CREDS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Set.new([
  'InvalidClientTokenId',        # query services
  'UnrecognizedClientException', # json services
  'InvalidAccessKeyId',          # s3
  'AuthFailure',                 # ec2
])
THROTTLING_ERRORS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Set.new([
  'Throttling',                             # query services
  'ThrottlingException',                    # json services
  'RequestThrottled',                       # sqs
  'RequestThrottledException',
  'ProvisionedThroughputExceededException', # dynamodb
  'TransactionInProgressException',         # dynamodb
  'RequestLimitExceeded',                   # ec2
  'BandwidthLimitExceeded',                 # cloud search
  'LimitExceededException',                 # kinesis
  'TooManyRequestsException',               # batch
])
CHECKSUM_ERRORS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Set.new([
  'CRC32CheckFailed', # dynamodb
])
NETWORKING_ERRORS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Set.new([
  'RequestTimeout', # s3
])

Instance Method Summary collapse

Constructor Details

#initialize(error, http_status_code) ⇒ ErrorInspector

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of ErrorInspector



98
99
100
101
102
# File 'lib/aws-sdk-core/plugins/retry_errors.rb', line 98

def initialize(error, http_status_code)
  @error = error
  @name = extract_name(error)
  @http_status_code = http_status_code
end

Instance Method Details

#checksum?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



112
113
114
# File 'lib/aws-sdk-core/plugins/retry_errors.rb', line 112

def checksum?
  CHECKSUM_ERRORS.include?(@name) || @error.is_a?(Errors::ChecksumError)
end

#endpoint_discovery?(context) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/aws-sdk-core/plugins/retry_errors.rb', line 125

def endpoint_discovery?(context)
  return false unless context.operation.endpoint_discovery

  if @http_status_code == 421 ||
    extract_name(@error) == 'InvalidEndpointException'
    @error = Errors::EndpointDiscoveryError.new
  end

  # When endpoint discovery error occurs
  # evict the endpoint from cache
  if @error.is_a?(Errors::EndpointDiscoveryError)
    key = context.config.endpoint_cache.extract_key(context)
    context.config.endpoint_cache.delete(key)
    true
  else
    false
  end
end

#expired_credentials?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



104
105
106
# File 'lib/aws-sdk-core/plugins/retry_errors.rb', line 104

def expired_credentials?
  !!(EXPIRED_CREDS.include?(@name) || @name.match(/expired/i))
end

#networking?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



116
117
118
119
# File 'lib/aws-sdk-core/plugins/retry_errors.rb', line 116

def networking?
  @error.is_a?(Seahorse::Client::NetworkingError) ||
  NETWORKING_ERRORS.include?(@name)
end

#retryable?(context) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



144
145
146
147
148
149
150
151
# File 'lib/aws-sdk-core/plugins/retry_errors.rb', line 144

def retryable?(context)
  (expired_credentials? and refreshable_credentials?(context)) or
    throttling_error? or
    checksum? or
    networking? or
    server? or
    endpoint_discovery?(context)
end

#server?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



121
122
123
# File 'lib/aws-sdk-core/plugins/retry_errors.rb', line 121

def server?
  (500..599).include?(@http_status_code)
end

#throttling_error?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



108
109
110
# File 'lib/aws-sdk-core/plugins/retry_errors.rb', line 108

def throttling_error?
  !!(THROTTLING_ERRORS.include?(@name) || @name.match(/throttl/i) || @http_status_code == 429)
end