macula_membership_detector (macula v0.20.5)
View SourceSWIM failure detector (pure logic, no GenServer). Orchestrates member list, gossip, and protocol timing.
Summary
Functions
Add a member to the list.
Apply received gossip updates.
Get all alive members.
Get gossip updates to piggyback on messages.
Get a member by node ID.
Get local node ID.
Mark a member as dead.
Mark a member as suspect.
Create a new detector state.
Get protocol period.
Refute suspicion (increment local incarnation).
Select a random member to probe (excluding self).
Types
-type detector_state() :: #{local_node_id := binary(), protocol_period := pos_integer(), indirect_count := pos_integer(), suspect_timeout := pos_integer(), member_list := macula_membership_list:member_list(), gossip := macula_membership_gossip:gossip_state()}.
Functions
-spec add_member(detector_state(), macula_membership_member:member()) -> detector_state().
Add a member to the list.
-spec apply_gossip_updates(detector_state(), [{binary(), macula_membership_member:status(), non_neg_integer()}]) -> detector_state().
Apply received gossip updates.
-spec get_alive_members(detector_state()) -> [macula_membership_member:member()].
Get all alive members.
-spec get_gossip_updates(detector_state(), pos_integer()) -> [macula_membership_gossip:update()].
Get gossip updates to piggyback on messages.
-spec get_member(detector_state(), binary()) -> {ok, macula_membership_member:member()} | not_found.
Get a member by node ID.
-spec local_node_id(detector_state()) -> binary().
Get local node ID.
-spec mark_dead(detector_state(), binary()) -> detector_state().
Mark a member as dead.
-spec mark_suspect(detector_state(), binary()) -> detector_state().
Mark a member as suspect.
-spec new(macula_membership_member:member(), map()) -> detector_state().
Create a new detector state.
-spec protocol_period(detector_state()) -> pos_integer().
Get protocol period.
-spec refute_suspicion(detector_state()) -> detector_state().
Refute suspicion (increment local incarnation).
-spec select_probe_target(detector_state()) -> {ok, macula_membership_member:member(), detector_state()} | none.
Select a random member to probe (excluding self).