Packages

Implements a retry budget and token bucket for retriable function execution

Current section

Files

Jump to
attempt lib attempt retry budget.ex
Raw

lib/attempt/retry/budget.ex

defmodule Attempt.Retry.Budget do
@moduledoc """
Defines the structure of a retry budget.
The elements of a retry budget are:
* `:tries` defines the maximum number of function
executions are permitted before an error is
returned. The minimum is 1.
* `:token_bucket` defines the token bucket used
to throttle the rate of function execution
* `:backkoff_strategy` defines the backoff strategy
when retrying execution. Any module that implements
the `Attempt.Retry.Backoff` behaviour. The default
is `Attempt.Retry.Backoff.Default`
"""
defstruct retry_policy: Attempt.Retry.Policy.Default,
backoff_strategy: Attempt.Retry.Backoff.None,
token_bucket: nil,
tries: 1,
current_try: 1,
last_sleep: 0,
timeout: 5_000
alias Attempt.{Bucket, Retry}
@type t :: %Retry.Budget{
retry_policy: module(),
token_bucket: Bucket.t(),
tries: non_neg_integer,
current_try: non_neg_integer,
backoff_strategy: module(),
last_sleep: non_neg_integer,
timeout: non_neg_integer
}
end