Module: StartHer::RetryPolicies

Included in:
RedisClient
Defined in:
lib/start_her/retry_policies.rb

Instance Method Summary collapse

Instance Method Details

#exponential_backoff(opts = {}, *exception_classes) ⇒ Object

rubocop:disable Metrics/AbcSize,Metrics/MethodLength



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/start_her/retry_policies.rb', line 4

def exponential_backoff(opts = {}, *exception_classes)
  options = { elapsed_time_secs: 600, multiplier: 2 }
  options.merge!(opts)

  time = 0.2
  started_at = Time.now.utc

  begin
    yield
  rescue *exception_classes => ex
    raise ex if (Time.now.utc - started_at) >= options[:elapsed_time_secs]
    sleep(time)

    time *= options[:multiplier]
    if (Time.now.utc - started_at) + time >= options[:elapsed_time_secs]
      time = options[:elapsed_time_secs] - (Time.now.utc - started_at)
    end

    retry
  end
end