Class: JetstreamBridge::BackoffStrategy

Inherits:
Object
  • Object
show all
Defined in:
lib/jetstream_bridge/consumer/message_processor.rb

Overview

Simple exponential backoff strategy for transient failures.

Produces a bounded delay in seconds based on delivery count and error type. Transient errors (Timeout, IO) use a lower base for faster retries.

Constant Summary collapse

TRANSIENT_ERRORS =

Error types considered transient (faster backoff)

[Timeout::Error, IOError].freeze
MAX_EXPONENT =
6
MAX_DELAY =
60
MIN_DELAY =
1

Instance Method Summary collapse

Instance Method Details

#delay(deliveries, error) ⇒ Integer

Calculate delay for the next retry attempt.

Parameters:

  • deliveries (Integer)

    Current delivery attempt number

  • error (Exception)

    The error that triggered the retry

Returns:

  • (Integer)

    Delay in seconds, clamped between MIN_DELAY and MAX_DELAY



61
62
63
64
65
66
# File 'lib/jetstream_bridge/consumer/message_processor.rb', line 61

def delay(deliveries, error)
  base = transient?(error) ? 0.5 : 2.0
  power = [deliveries - 1, MAX_EXPONENT].min
  raw = (base * (2**power)).to_i
  raw.clamp(MIN_DELAY, MAX_DELAY)
end