open Types module Member : sig type t val create : ?initial_state:member_state -> ?initial_incarnation:incarnation -> now:Mtime.span -> node_info -> t val node : t -> node_info val get_state : xt:'x Kcas.Xt.t -> t -> member_state val get_incarnation : xt:'x Kcas.Xt.t -> t -> incarnation val get_state_change_time : xt:'x Kcas.Xt.t -> t -> Mtime.span val get_last_ack_time : xt:'x Kcas.Xt.t -> t -> Mtime.span val set_state : xt:'x Kcas.Xt.t -> t -> member_state -> now:Mtime.span -> unit val set_incarnation : xt:'x Kcas.Xt.t -> t -> incarnation -> unit val set_alive : xt:'x Kcas.Xt.t -> t -> incarnation:incarnation -> now:Mtime.span -> unit val set_suspect : xt:'x Kcas.Xt.t -> t -> incarnation:incarnation -> now:Mtime.span -> unit val set_dead : xt:'x Kcas.Xt.t -> t -> incarnation:incarnation -> now:Mtime.span -> unit val record_ack : xt:'x Kcas.Xt.t -> t -> now:Mtime.span -> unit val snapshot : xt:'x Kcas.Xt.t -> t -> member_snapshot val snapshot_now : t -> member_snapshot end type t val create : unit -> t val add : t -> Member.t -> unit val remove : t -> node_id -> bool val find : t -> node_id -> Member.t option val mem : t -> node_id -> bool val to_list : t -> Member.t list val to_node_list : t -> node_info list val count : t -> int type member_updater = { update : 'x. Member.t -> xt:'x Kcas.Xt.t -> unit } val update_member : t -> node_id -> member_updater -> bool val iter_alive : t -> (Member.t -> member_snapshot -> unit) -> unit val snapshot_all : t -> member_snapshot list