macula_membership_list (macula v0.20.5)
View SourceMembership list for SWIM protocol. Maintains cluster membership view with fast concurrent access. Uses map-based storage (could be ETS in production).
Summary
Functions
Add a new member to the list. If member already exists, this is a no-op (use update_member instead).
Get all alive members.
Get all members.
Get a member by node ID.
Get N random members from the list.
Get N random members excluding specified node ID.
Get all suspect members.
Create a new membership list with the local node.
Remove a member from the list.
Get the number of members in the list.
Update an existing member (or add if not present). Uses merge semantics to resolve conflicts.
Types
-type member_list() :: #{members := #{binary() => macula_membership_member:member()}}.
Functions
-spec add_member(member_list(), macula_membership_member:member()) -> member_list().
Add a new member to the list. If member already exists, this is a no-op (use update_member instead).
-spec get_alive_members(member_list()) -> [macula_membership_member:member()].
Get all alive members.
-spec get_all_members(member_list()) -> [macula_membership_member:member()].
Get all members.
-spec get_member(member_list(), binary()) -> {ok, macula_membership_member:member()} | not_found.
Get a member by node ID.
-spec get_random_members(member_list(), pos_integer()) -> [macula_membership_member:member()].
Get N random members from the list.
-spec get_random_members(member_list(), pos_integer(), binary() | undefined) -> [macula_membership_member:member()].
Get N random members excluding specified node ID.
-spec get_suspect_members(member_list()) -> [macula_membership_member:member()].
Get all suspect members.
-spec new(macula_membership_member:member()) -> member_list().
Create a new membership list with the local node.
-spec remove_member(member_list(), binary()) -> member_list().
Remove a member from the list.
-spec size(member_list()) -> non_neg_integer().
Get the number of members in the list.
-spec update_member(member_list(), macula_membership_member:member()) -> member_list().
Update an existing member (or add if not present). Uses merge semantics to resolve conflicts.