Fief.Leadership behaviour (Fief v0.1.0)

Copy Markdown View Source

Leader election contract (design §5.1, implementation.md §3). An adapter is started per instance and campaigns on behalf of its node; it notifies the configured pid with

{:fief_leadership, :elected, term}
{:fief_leadership, :deposed}

Terms are monotonic per namespace: a new election never reuses or lowers a term, which is what makes term validation in Fief.StateStore.cas_assign/5 a fence against zombie planners.

Summary

Callbacks

Current leader, if any.

Types

leader_term()

@type leader_term() :: pos_integer()

provider()

@type provider() :: GenServer.server()

Callbacks

leader(provider)

@callback leader(provider()) ::
  {:ok, {node_id :: term(), leader_term()}} | {:error, :none}

Current leader, if any.

start_link(opts)

@callback start_link(opts :: keyword()) :: GenServer.on_start()