Module: HTTPX::Plugins::Retries
- Defined in:
- lib/httpx/plugins/retries.rb,
sig/plugins/retries.rbs
Overview
This plugin adds support for retrying requests when errors happen.
It has a default max number of retries (see MAX_RETRIES and the max_retries option), after which it will return the last response, error or not. It will not raise an exception.
It does not retry which are not considered idempotent (see retry_change_requests to override).
Defined Under Namespace
Modules: InstanceMethods, OptionsMethods, RequestMethods, ResponseMethods, _RetriesOptions, _RetryCallback
Constant Summary collapse
- MAX_RETRIES =
3- IDEMPOTENT_METHODS =
TODO: pass max_retries in a configure/load block
%w[GET OPTIONS HEAD PUT DELETE].freeze
- RECONNECTABLE_ERRORS =
subset of retryable errors which are safe to retry when reconnecting
[ IOError, EOFError, Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPIPE, Errno::EINVAL, Errno::ETIMEDOUT, ConnectionError, TLSError, Connection::HTTP2::Error, ].freeze
- RETRYABLE_ERRORS =
(RECONNECTABLE_ERRORS + [ Parser::Error, TimeoutError, ]).freeze
- DEFAULT_JITTER =
->(interval) { interval * ((rand + 1) * 0.5) }.freeze
- BACKOFF_ALGORITHMS =
list of supported backoff algorithms
%i[exponential_backoff polynomial_backoff].freeze
Class Method Summary collapse
- .extra_options ⇒ retriesOptions
-
.retry_after_exponential_backoff(request, _) ⇒ Object
returns the time to wait before resending
requestas per the exponential backoff retry strategy, where base is 2. -
.retry_after_polynomial_backoff(request, _) ⇒ Object
returns the time to wait before resending
requestas per the polynomial backoff retry strategy, where base is 1 and exponent is 2.
Instance Method Summary collapse
- #extra_options(options) ⇒ Object
- #self?.retry_after_exponential_backoff ⇒ interval
- #self?.retry_after_polynomial_backoff ⇒ interval
Class Method Details
.extra_options ⇒ retriesOptions
31 |
# File 'sig/plugins/retries.rbs', line 31
def self.extra_options: (Options options) -> retriesOptions
|
.retry_after_exponential_backoff(request, _) ⇒ Object
returns the time to wait before resending request as per the exponential backoff retry strategy,
where base is 2
65 66 67 68 |
# File 'lib/httpx/plugins/retries.rb', line 65 def retry_after_exponential_backoff(request, _) offset = request..max_retries - request.retries 2**(offset - 1) end |
.retry_after_polynomial_backoff(request, _) ⇒ Object
returns the time to wait before resending request as per the polynomial backoff retry strategy,
where base is 1 and exponent is 2.
58 59 60 61 |
# File 'lib/httpx/plugins/retries.rb', line 58 def retry_after_polynomial_backoff(request, _) offset = request..max_retries - request.retries 1 * ((offset - 1)**2) end |
Instance Method Details
#extra_options(options) ⇒ Object
47 48 49 |
# File 'lib/httpx/plugins/retries.rb', line 47 def () .merge(max_retries: MAX_RETRIES) end |
#self?.retry_after_exponential_backoff ⇒ interval
13 |
# File 'sig/plugins/retries.rbs', line 13
def self?.retry_after_exponential_backoff: (retriesRequest request, retriesResponse response) -> interval
|
#self?.retry_after_polynomial_backoff ⇒ interval
11 |
# File 'sig/plugins/retries.rbs', line 11
def self?.retry_after_polynomial_backoff: (retriesRequest request, retriesResponse response) -> interval
|