class Gapic::Operation::RetryPolicy

The policy for retrying operation reloads using an incremental backoff. A new object instance should be used for every Operation invocation.

Public Class Methods

new(initial_delay: nil, multiplier: nil, max_delay: nil, timeout: nil) click to toggle source

Create new Operation RetryPolicy.

@param initial_delay [Numeric] client-side timeout @param multiplier [Numeric] client-side timeout @param max_delay [Numeric] client-side timeout @param timeout [Numeric] client-side timeout

# File lib/gapic/operation/retry_policy.rb, line 30
def initialize initial_delay: nil, multiplier: nil, max_delay: nil, timeout: nil
  @initial_delay = initial_delay
  @multiplier    = multiplier
  @max_delay     = max_delay
  @timeout       = timeout
  @delay         = nil
end

Public Instance Methods

call() click to toggle source
# File lib/gapic/operation/retry_policy.rb, line 54
def call
  return unless retry?

  delay!
  increment_delay!

  true
end
initial_delay() click to toggle source
# File lib/gapic/operation/retry_policy.rb, line 38
def initial_delay
  @initial_delay || 10
end
max_delay() click to toggle source
# File lib/gapic/operation/retry_policy.rb, line 46
def max_delay
  @max_delay || 300 # Five minutes
end
multiplier() click to toggle source
# File lib/gapic/operation/retry_policy.rb, line 42
def multiplier
  @multiplier || 1.3
end
timeout() click to toggle source
# File lib/gapic/operation/retry_policy.rb, line 50
def timeout
  @timeout || 3600 # One hour
end

Private Instance Methods

deadline() click to toggle source
# File lib/gapic/operation/retry_policy.rb, line 65
def deadline
  # memoize the deadline
  @deadline ||= Time.now + timeout
end
delay() click to toggle source

The current delay value.

# File lib/gapic/operation/retry_policy.rb, line 76
def delay
  @delay || initial_delay
end
delay!() click to toggle source
# File lib/gapic/operation/retry_policy.rb, line 80
def delay!
  # Call Kernel.sleep so we can stub it.
  Kernel.sleep delay
end
increment_delay!() click to toggle source

Calculate and set the next delay value.

# File lib/gapic/operation/retry_policy.rb, line 87
def increment_delay!
  @delay = [delay * multiplier, max_delay].min
end
retry?() click to toggle source
# File lib/gapic/operation/retry_policy.rb, line 70
def retry?
  deadline > Time.now
end