RaftEx.Types (raft_ex v0.1.0)

View Source

Shared type definitions and protocol message structs for the Raft implementation.

All Raft wire-protocol messages (RPCs, replies) are defined here as structs so they can be pattern-matched cleanly across the codebase.

Summary

Types

cluster()

@type cluster() :: %{required(server_id()) => peer_state()}

cluster_name()

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

idxterm()

@type idxterm() :: {index(), term_num()}

index()

@type index() :: non_neg_integer()

log_entry()

@type log_entry() :: {index(), term_num(), term()}

membership()

@type membership() :: :voter | :promotable | :non_voter | :unknown

peer_state()

@type peer_state() :: %{
  optional(:voter_status) => voter_status(),
  optional(:machine_version) => non_neg_integer(),
  next_index: non_neg_integer(),
  match_index: non_neg_integer(),
  query_index: non_neg_integer(),
  commit_index_sent: non_neg_integer(),
  status: peer_status()
}

peer_status()

@type peer_status() ::
  :normal
  | {:sending_snapshot, pid(), non_neg_integer()}
  | {:snapshot_backoff, non_neg_integer()}
  | :suspended
  | :disconnected

ra_state()

@type ra_state() ::
  :leader
  | :follower
  | :candidate
  | :pre_vote
  | :await_condition
  | :delete_and_terminate
  | :terminating_leader
  | :terminating_follower
  | :recover
  | :recovered
  | :stop
  | :receive_snapshot

server_id()

@type server_id() :: {name :: atom(), node :: node()}

term_num()

@type term_num() :: non_neg_integer()

uid()

@type uid() :: binary()

voter_status()

@type voter_status() :: %{
  optional(:membership) => membership(),
  optional(:uid) => uid(),
  optional(:target) => index()
}