Class: Philiprehberger::WebhookBuilder::Backoff::Decorrelated
- Inherits:
-
Object
- Object
- Philiprehberger::WebhookBuilder::Backoff::Decorrelated
- Defined in:
- lib/philiprehberger/webhook_builder/backoff.rb
Overview
Decorrelated jitter backoff (AWS-style): each delay is a random value in ‘[base, [cap, prev * 3].min]`, which spreads retries to avoid thundering-herd effects while still trending toward the cap.
See: aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/
Instance Method Summary collapse
-
#call(_attempt) ⇒ Float
Delay in seconds.
-
#initialize(base: 1, max_delay: 30) ⇒ Decorrelated
constructor
A new instance of Decorrelated.
Constructor Details
#initialize(base: 1, max_delay: 30) ⇒ Decorrelated
Returns a new instance of Decorrelated.
64 65 66 67 68 |
# File 'lib/philiprehberger/webhook_builder/backoff.rb', line 64 def initialize(base: 1, max_delay: 30) @base = base.to_f @max_delay = max_delay.to_f @prev = @base end |
Instance Method Details
#call(_attempt) ⇒ Float
Returns delay in seconds.
72 73 74 75 76 77 |
# File 'lib/philiprehberger/webhook_builder/backoff.rb', line 72 def call(_attempt) upper = [@max_delay, @prev * 3].min upper = @base if upper < @base @prev = @base + (rand * (upper - @base)) @prev end |