Module: Mihari::Concerns::Retriable
Overview
Retriable concern
Constant Summary collapse
- RETRIABLE_ERRORS =
[ OpenSSL::SSL::SSLError, Timeout::Error, ::HTTP::ConnectionError, ::HTTP::ResponseError, ::HTTP::TimeoutError ].freeze
- DEFAULT_CONDITION =
lambda do |error| return true if RETRIABLE_ERRORS.any? { |klass| error.is_a? klass } case error when StatusError ![401, 404].include?(error.status_code) else false end end
Instance Method Summary collapse
-
#retry_on_error(times: 3, interval: 5, exponential_backoff: true, condition: DEFAULT_CONDITION) ⇒ Object
Retry on error.
Instance Method Details
#retry_on_error(times: 3, interval: 5, exponential_backoff: true, condition: DEFAULT_CONDITION) ⇒ Object
Retry on error
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/mihari/concerns/retriable.rb', line 39 def retry_on_error(times: 3, interval: 5, exponential_backoff: true, condition: DEFAULT_CONDITION) try = 0 begin try += 1 yield rescue => e # Raise error if it's not a retriable error raise e unless condition.call(e) sleep_seconds = exponential_backoff ? interval * (2**(try - 1)) : interval sleep sleep_seconds retry if try < times # Raise error if retry times exceed a given times raise e end end |