Class: Philiprehberger::WebhookBuilder::Backoff::Exponential

Inherits:
Object
  • Object
show all
Defined in:
lib/philiprehberger/webhook_builder/backoff.rb

Overview

Exponential backoff: base * 2^attempt, capped at max_delay.

Instance Method Summary collapse

Constructor Details

#initialize(base: 1, max_delay: 30, jitter: false) ⇒ Exponential

Returns a new instance of Exponential.

Parameters:

  • base (Numeric) (defaults to: 1)

    base delay in seconds (default: 1)

  • max_delay (Numeric) (defaults to: 30)

    maximum delay in seconds (default: 30)

  • jitter (Boolean) (defaults to: false)

    whether to add random jitter (default: false)



11
12
13
14
15
# File 'lib/philiprehberger/webhook_builder/backoff.rb', line 11

def initialize(base: 1, max_delay: 30, jitter: false)
  @base = base
  @max_delay = max_delay
  @jitter = jitter
end

Instance Method Details

#call(attempt) ⇒ Float

Returns delay in seconds.

Parameters:

  • attempt (Integer)

    the current attempt number (1-based)

Returns:

  • (Float)

    delay in seconds



19
20
21
22
23
# File 'lib/philiprehberger/webhook_builder/backoff.rb', line 19

def call(attempt)
  delay = [@base * (2**(attempt - 1)), @max_delay].min.to_f
  delay *= rand if @jitter
  delay
end