Module: HasHelpers::ServiceTrust::Client::Retry

Defined in:
lib/has_helpers/service_trust/client/retry.rb

Constant Summary collapse

DEFAULT_DELAYS =
[0.2, 1.0, 5.0].freeze

Class Method Summary collapse

Class Method Details

.sleep_for(attempt) ⇒ Object



29
30
31
# File 'lib/has_helpers/service_trust/client/retry.rb', line 29

def sleep_for(attempt)
  sleep(DEFAULT_DELAYS.fetch(attempt - 1, DEFAULT_DELAYS.last))
end

.with_backoff(retries:, retry_on_status:) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/has_helpers/service_trust/client/retry.rb', line 11

def with_backoff(retries:, retry_on_status:)
  attempt = 0

  loop do
    attempt += 1
    begin
      response = yield
      return response if response.success?
      raise ClientHTTPError.new(response.status, response.body) unless retry_on_status.include?(response.status)
      raise ClientHTTPError.new(response.status, response.body) if attempt > retries
    rescue ClientTimeoutError
      raise if attempt > retries
    end

    sleep_for(attempt)
  end
end