| Class | RightAws::AwsError |
| In: |
lib/awsbase/right_awsbase.rb
|
| Parent: | RuntimeError |
Exception class to signal any Amazon errors. All errors occuring during calls to Amazon‘s web services raise this type of error. Attribute inherited by RuntimeError:
message - the text of the error, generally as returned by AWS in its XML response.
| errors | [R] | either an array of errors where each item is itself an array of [code, message]), or an error string if the error was raised manually, as in AwsError.new(‘err_text’) |
| http_code | [R] | Response HTTP error code |
| request_id | [R] | Request id (if exists) |
# File lib/awsbase/right_awsbase.rb, line 407
407: def initialize(errors=nil, http_code=nil, request_id=nil)
408: @errors = errors
409: @request_id = request_id
410: @http_code = http_code
411: super(@errors.is_a?(Array) ? @errors.map{|code, msg| "#{code}: #{msg}"}.join("; ") : @errors.to_s)
412: end
Generic handler for AwsErrors. aws is the RightAws::S3, RightAws::EC2, or RightAws::SQS object that caused the exception (it must provide last_request and last_response). Supported boolean options are:
# File lib/awsbase/right_awsbase.rb, line 431
431: def self.on_aws_exception(aws, options={:raise=>true, :log=>true})
432: # Only log & notify if not user error
433: if !options[:raise] || system_error?($!)
434: error_text = "#{$!.inspect}\n#{$@}.join('\n')}"
435: puts error_text if options[:puts]
436: # Log the error
437: if options[:log]
438: request = aws.last_request ? aws.last_request.path : '-none-'
439: response = aws.last_response ? "#{aws.last_response.code} -- #{aws.last_response.message} -- #{aws.last_response.body}" : '-none-'
440: aws.logger.error error_text
441: aws.logger.error "Request was: #{request}"
442: aws.logger.error "Response was: #{response}"
443: end
444: end
445: raise if options[:raise] # re-raise an exception
446: return nil
447: end
True if e is an AWS system error, i.e. something that is for sure not the caller‘s fault. Used to force logging.
# File lib/awsbase/right_awsbase.rb, line 451
451: def self.system_error?(e)
452: !e.is_a?(self) || e.message =~ /InternalError|InsufficientInstanceCapacity|Unavailable/
453: end
Does any of the error messages include the regexp pattern? Used to determine whether to retry request.
# File lib/awsbase/right_awsbase.rb, line 416
416: def include?(pattern)
417: if @errors.is_a?(Array)
418: @errors.each{ |code, msg| return true if code =~ pattern }
419: else
420: return true if @errors_str =~ pattern
421: end
422: false
423: end