FerricStore.ResourceLimits behaviour (ferricstore v0.5.7)

Copy Markdown View Source

Stable resource-limit contract for FerricStore control planes and write paths.

The public management commands use set_limit/3, get_limit/2, and usage/2. Internal enforcement points can use check/4, reserve/4, and release/2 without coupling storage code to any specific limit backend.

Summary

Types

amount()

@type amount() :: non_neg_integer()

limit_spec()

@type limit_spec() :: map()

reservation()

@type reservation() :: term()

resource()

@type resource() :: atom() | binary()

result()

@type result() :: :ok | {:ok, term()} | {:error, term()}

scope()

@type scope() :: binary() | map()

Callbacks

check(scope, resource, amount, keyword)

@callback check(scope(), resource(), amount(), keyword()) :: :ok | {:error, term()}

get_limit(scope, keyword)

@callback get_limit(
  scope(),
  keyword()
) :: result()

release(reservation, keyword)

@callback release(
  reservation(),
  keyword()
) :: :ok | {:error, term()}

reserve(scope, resource, amount, keyword)

@callback reserve(scope(), resource(), amount(), keyword()) ::
  {:ok, reservation()} | {:error, term()}

set_limit(scope, limit_spec, keyword)

@callback set_limit(scope(), limit_spec(), keyword()) :: result()

usage(scope, keyword)

@callback usage(
  scope(),
  keyword()
) :: result()

Functions

check(scope, resource, amount, opts \\ [])

@spec check(scope(), resource(), amount(), keyword()) :: :ok | {:error, term()}

get_limit(scope, opts \\ [])

@spec get_limit(
  scope(),
  keyword()
) :: result()

release(reservation, opts \\ [])

@spec release(
  reservation(),
  keyword()
) :: :ok | {:error, term()}

reserve(scope, resource, amount, opts \\ [])

@spec reserve(scope(), resource(), amount(), keyword()) ::
  {:ok, reservation()} | {:error, term()}

set_limit(scope, limit_spec, opts \\ [])

@spec set_limit(scope(), limit_spec(), keyword()) :: result()

usage(scope, opts \\ [])

@spec usage(
  scope(),
  keyword()
) :: result()