Module: Legion::Extensions::Lakera::Helpers::Retry

Defined in:
lib/legion/extensions/lakera/helpers/retry.rb

Constant Summary collapse

DEFAULT_MAX_ATTEMPTS =
3
DEFAULT_BASE_DELAY =
1.0
DEFAULT_MAX_DELAY =
60.0

Class Method Summary collapse

Class Method Details

.backoff_seconds(attempt:, base_delay: DEFAULT_BASE_DELAY, max_delay: DEFAULT_MAX_DELAY) ⇒ Object



33
34
35
36
# File 'lib/legion/extensions/lakera/helpers/retry.rb', line 33

def backoff_seconds(attempt:, base_delay: DEFAULT_BASE_DELAY, max_delay: DEFAULT_MAX_DELAY)
  raw = base_delay * (2**attempt)
  [raw, max_delay].min.to_f
end

.with_retry(max_attempts: DEFAULT_MAX_ATTEMPTS, base_delay: DEFAULT_BASE_DELAY, max_delay: DEFAULT_MAX_DELAY) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/legion/extensions/lakera/helpers/retry.rb', line 16

def with_retry(max_attempts: DEFAULT_MAX_ATTEMPTS, base_delay: DEFAULT_BASE_DELAY,
               max_delay: DEFAULT_MAX_DELAY)
  attempt = 0
  begin
    yield
  rescue Errors::ApiError => e
    raise unless Errors.retryable?(e)

    attempt += 1
    raise if attempt >= max_attempts

    delay = backoff_seconds(attempt: attempt - 1, base_delay: base_delay, max_delay: max_delay)
    sleep(delay) if delay.positive?
    retry
  end
end