Class: Chronos::Application::RetryPolicy
- Inherits:
-
Object
- Object
- Chronos::Application::RetryPolicy
- Defined in:
- lib/chronos/application/retry_policy.rb
Overview
Bounded retry timing policy with exponential backoff and jitter.
Instance Method Summary collapse
- #delay(retry_number, result = nil) ⇒ Object
-
#initialize(options) ⇒ RetryPolicy
constructor
A new instance of RetryPolicy.
- #retry?(result, retries) ⇒ Boolean
Constructor Details
#initialize(options) ⇒ RetryPolicy
Returns a new instance of RetryPolicy.
18 19 20 21 22 23 24 |
# File 'lib/chronos/application/retry_policy.rb', line 18 def initialize() @max_retries = [:max_retries] @base_interval = [:base_interval] @max_interval = [:max_interval] @jitter = [:jitter] @random = [:random] || proc { rand } end |
Instance Method Details
#delay(retry_number, result = nil) ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'lib/chronos/application/retry_policy.rb', line 30 def delay(retry_number, result = nil) retry_after = retry_after_seconds(result) return [retry_after, @max_interval].min if retry_after base = @base_interval * (2**(retry_number - 1)) jittered = base * (1.0 + (@random.call.to_f * @jitter)) [jittered, @max_interval].min end |
#retry?(result, retries) ⇒ Boolean
26 27 28 |
# File 'lib/chronos/application/retry_policy.rb', line 26 def retry?(result, retries) result.retryable? && retries < @max_retries end |