Module: CMDx::Retriers::DecorrelatedJitter Private

Extended by:
DecorrelatedJitter
Included in:
DecorrelatedJitter
Defined in:
lib/cmdx/retriers/decorrelated_jitter.rb

Overview

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

AWS-recommended decorrelated jitter. Produces a uniform delay in ‘[delay, max(prev_delay * 3, delay)]`, threading state across attempts via `prev_delay`. When no previous delay exists the upper bound collapses to `3 * delay`, matching the AWS reference implementation. The lower bound is pinned at `delay` even when `prev_delay * 3 < delay` (e.g. after `:max_delay` clamping or mixed strategies), guaranteeing the returned value is never below the configured base.

Instance Method Summary collapse

Instance Method Details

#call(_attempt, delay, prev_delay = nil) ⇒ Float

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns computed delay, never less than ‘delay`.

Parameters:

  • _attempt (Integer)

    ignored

  • delay (Float)

    base delay in seconds (also the lower bound)

  • prev_delay (Float, nil) (defaults to: nil)

    previous computed delay; falls back to ‘delay` so the first call samples in `[delay, 3*delay]`

Returns:

  • (Float)

    computed delay, never less than ‘delay`



24
25
26
27
28
29
# File 'lib/cmdx/retriers/decorrelated_jitter.rb', line 24

def call(_attempt, delay, prev_delay = nil)
  base = prev_delay || delay
  high = base * 3
  high = delay if high < delay
  delay + (rand * (high - delay))
end