Class: Baidubce::BackOffRetryPolicy

Inherits:
Object
  • Object
show all
Includes:
Log
Defined in:
lib/baidubce/retry_policy.rb

Overview

When a maximum of delay time is specified, the delay time will never exceed this limit.

Constant Summary

Constants included from Log

Log::DEFAULT_LOG_FILE, Log::LOG_FILE_SIZE, Log::MAX_NUM_LOG

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Log

#logger, set_log_file, set_log_level

Constructor Details

#initialize(max_error_retry = 3, max_delay_in_millis = 20 * 1000, base_interval_in_millis = 300) ⇒ BackOffRetryPolicy

Returns a new instance of BackOffRetryPolicy.

Raises:



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/baidubce/retry_policy.rb', line 46

def initialize(max_error_retry=3,
               max_delay_in_millis=20 * 1000,
               base_interval_in_millis=300)

    max_error_retry_msg = "max_error_retry should be a non-negative integer."
    max_delay_in_millis_msg = "max_delay_in_millis should be a non-negative integer."
    raise BceClientException.new(max_error_retry_msg) if max_error_retry < 0
    raise BceClientException.new(max_delay_in_millis_msg) if max_delay_in_millis < 0
    @max_error_retry = max_error_retry
    @max_delay_in_millis = max_delay_in_millis
    @base_interval_in_millis = base_interval_in_millis
end

Instance Attribute Details

#base_interval_in_millisObject

Returns the value of attribute base_interval_in_millis.



44
45
46
# File 'lib/baidubce/retry_policy.rb', line 44

def base_interval_in_millis
  @base_interval_in_millis
end

#max_delay_in_millisObject

Returns the value of attribute max_delay_in_millis.



44
45
46
# File 'lib/baidubce/retry_policy.rb', line 44

def max_delay_in_millis
  @max_delay_in_millis
end

#max_error_retryObject

Returns the value of attribute max_error_retry.



44
45
46
# File 'lib/baidubce/retry_policy.rb', line 44

def max_error_retry
  @max_error_retry
end

Instance Method Details

#get_delay_before_next_retry_in_millis(retries_attempted) ⇒ Object

Returns the delay time in milliseconds before the next retry.



85
86
87
88
89
90
# File 'lib/baidubce/retry_policy.rb', line 85

def get_delay_before_next_retry_in_millis(retries_attempted)
    return 0 if retries_attempted < 0
    delay_in_millis = (1 << retries_attempted) * @base_interval_in_millis
    return @max_delay_in_millis if delay_in_millis > @max_delay_in_millis
    return delay_in_millis
end

#should_retry(http_code, retries_attempted) ⇒ Object

Return true if the http client should retry the request.



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/baidubce/retry_policy.rb', line 60

def should_retry(http_code, retries_attempted)

    # stop retrying when the maximum number of retries is reached
    return false if retries_attempted >= @max_error_retry
    return true if http_code.nil?

    # Only retry on a subset of service exceptions
    if http_code == 408
        logger.debug('Retry for request timeout.')
        return true
    end
    # retry for SocketError
    if http_code == SOCKET_ERROR_CODE
        logger.debug('Retry for request SocketError.')
        return true
    end

    if http_code >= 500 && http_code != 501
        logger.debug('Retry for server error.')
        return true
    end
    return false
end