Class: Philiprehberger::WebhookBuilder::Backoff::Decorrelated

Inherits:
Object
  • Object
show all
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

Constructor Details

#initialize(base: 1, max_delay: 30) ⇒ Decorrelated

Returns a new instance of Decorrelated.

Parameters:

  • base (Numeric) (defaults to: 1)

    minimum delay in seconds (default: 1)

  • max_delay (Numeric) (defaults to: 30)

    maximum delay in seconds (default: 30)



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.

Parameters:

  • _attempt (Integer)

    ignored (state is carried in @prev)

Returns:

  • (Float)

    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