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.

Returns:

  • (Boolean)


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.

Returns:

  • (Boolean)


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.

Returns:

  • (Boolean)


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.

Returns:

  • (Boolean)


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.

Returns:

  • (Boolean)


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.

Returns:

  • (Boolean)


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.

Returns:

  • (Boolean)


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