Pure retry timing helpers. Delays and timestamps use milliseconds.
Summary
Functions
Calculates capped exponential backoff with caller-supplied jitter in [0, 1].
Parses Retry-After seconds or an IMF-fixdate relative to an explicit clock.
Functions
@spec backoff(non_neg_integer(), pos_integer(), pos_integer(), float()) :: non_neg_integer()
Calculates capped exponential backoff with caller-supplied jitter in [0, 1].
iex> OtlpShipper.Retry.backoff(2, 100, 1000, 0.5)
400
iex> OtlpShipper.Retry.backoff(20, 100, 1000, 1.0)
1000
@spec retry_after(String.t(), DateTime.t()) :: {:ok, non_neg_integer()} | :error
Parses Retry-After seconds or an IMF-fixdate relative to an explicit clock.
iex> OtlpShipper.Retry.retry_after("2", ~U[2026-09-12 12:00:00Z])
{:ok, 2000}
iex> OtlpShipper.Retry.retry_after("Sat, 12 Sep 2026 12:00:03 GMT", ~U[2026-09-12 12:00:00Z])
{:ok, 3000}
iex> OtlpShipper.Retry.retry_after("invalid", ~U[2026-09-12 12:00:00Z])
:error