class Rudder::Analytics::BackoffPolicy
Public Class Methods
new(opts = {})
click to toggle source
@param [Hash] opts @option opts [Numeric] :min_timeout_ms The minimum backoff timeout @option opts [Numeric] :max_timeout_ms The maximum backoff timeout @option opts [Numeric] :multiplier The value to multiply the current
interval with for each retry attempt
@option opts [Numeric] :randomization_factor The randomization factor
to use to create a range around the retry interval
# File lib/rudder/analytics/backoff_policy.rb, line 15 def initialize(opts = {}) @min_timeout_ms = opts[:min_timeout_ms] || MIN_TIMEOUT_MS @max_timeout_ms = opts[:max_timeout_ms] || MAX_TIMEOUT_MS @multiplier = opts[:multiplier] || MULTIPLIER @randomization_factor = opts[:randomization_factor] || RANDOMIZATION_FACTOR @attempts = 0 end
Public Instance Methods
next_interval()
click to toggle source
@return [Numeric] the next backoff interval, in milliseconds.
# File lib/rudder/analytics/backoff_policy.rb, line 25 def next_interval interval = @min_timeout_ms * (@multiplier**@attempts) interval = add_jitter(interval, @randomization_factor) @attempts += 1 [interval, @max_timeout_ms].min end
Private Instance Methods
add_jitter(base, randomization_factor)
click to toggle source
# File lib/rudder/analytics/backoff_policy.rb, line 36 def add_jitter(base, randomization_factor) random_number = rand max_deviation = base * randomization_factor deviation = random_number * max_deviation if random_number < 0.5 base - deviation else base + deviation end end