class Baidubce::BackOffRetryPolicy

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

Attributes

base_interval_in_millis[RW]
max_delay_in_millis[RW]
max_error_retry[RW]

Public Class Methods

new(max_error_retry=3, max_delay_in_millis=20 * 1000, base_interval_in_millis=300) click to toggle source
# 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

Public Instance Methods

get_delay_before_next_retry_in_millis(retries_attempted) click to toggle source

Returns the delay time in milliseconds before the next retry.

# 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) click to toggle source

Return true if the http client should retry the request.

# 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