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
- .backoff_seconds(attempt:, base_delay: DEFAULT_BASE_DELAY, max_delay: DEFAULT_MAX_DELAY) ⇒ Object
- .with_retry(max_attempts: DEFAULT_MAX_ATTEMPTS, base_delay: DEFAULT_BASE_DELAY, max_delay: DEFAULT_MAX_DELAY) ⇒ Object
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 |