Swim.Protocol
swim · API reference
type t = {
config : Types.config;
self : Types.node_info;
members : Membership.t;
incarnation : Types.incarnation Kcas.Loc.t;
sequence : int Kcas.Loc.t;
broadcast_queue : Dissemination.t;
pending_acks : Pending_acks.t;
probe_index : int Kcas.Loc.t;
send_pool : Buffer_pool.t;
recv_pool : Buffer_pool.t;
tcp_recv_pool : Buffer_pool.t;
tcp_decompress_pool : Buffer_pool.t;
udp_sock : [ `Generic ] Eio.Net.datagram_socket_ty Eio.Resource.t;
tcp_listener : [ `Generic ] Eio.Net.listening_socket_ty Eio.Resource.t;
event_stream : Types.node_event Eio.Stream.t;
user_handlers : (Types.node_info -> string -> string -> unit) list Kcas.Loc.t;
cipher_key : Crypto.key;
stats : Types.stats Kcas.Loc.t;
shutdown : bool Kcas.Loc.t;
clock : float Eio.Time.clock_ty Eio.Resource.t;
mono_clock : Eio.Time.Mono.ty Eio.Resource.t;
secure_random : Eio.Flow.source_ty Eio.Resource.t;
sw : Eio.Switch.t;
}val next_seq : t -> intval get_incarnation : t -> Types.incarnationval incr_my_incarnation : t -> Types.incarnationval is_shutdown : t -> boolval now_mtime : t -> Mtime.spanval update_stats : t -> (Types.stats -> Types.stats) -> unitval emit_event : t -> Types.node_event -> unitval send_packet : t -> dst:Eio.Net.Sockaddr.datagram -> Types.packet -> unitval make_packet :
t ->
primary:Types.protocol_msg ->
piggyback:Types.protocol_msg list ->
Types.packetval drain_piggyback : t -> max_bytes:int -> Types.protocol_msg listval enqueue_broadcast : t -> Types.protocol_msg -> unitval handle_ping :
t ->
src:Eio.Net.Sockaddr.datagram ->
Types.protocol_msg ->
unitval handle_ping_req : t -> src:'a -> Types.protocol_msg -> unitval handle_ack : t -> Types.protocol_msg -> unitval apply_member_transition :
t ->
Types.node_id ->
(Types.member_snapshot ->
now:Mtime.span ->
Types.member_snapshot Protocol_pure.transition) ->
unitval handle_alive_msg : t -> Types.protocol_msg -> unitval handle_suspect_msg : t -> Types.protocol_msg -> unitval handle_dead_msg : t -> Types.protocol_msg -> unitval handle_user_msg : t -> Types.protocol_msg -> unitval handle_message :
t ->
src:Eio.Net.Sockaddr.datagram ->
Types.protocol_msg ->
unitval handle_packet : t -> src:Eio.Net.Sockaddr.datagram -> Types.packet -> unitval process_udp_packet :
t ->
buf:Cstruct.t ->
src:Eio.Net.Sockaddr.datagram ->
unitval run_udp_receiver : t -> unitval build_local_state :
t ->
is_join:bool ->
Types.Wire.push_pull_header * Types.Wire.push_node_state listval merge_remote_state :
t ->
Types.Wire.push_node_state list ->
is_join:bool ->
unitval read_exact :
[> Eio.Flow.source_ty ] Eio.Flow.source ->
Cstruct.t ->
int ->
(unit, [> `Connection_closed | `Read_error ]) resultval read_available :
[> Eio.Flow.source_ty ] Eio.Flow.source ->
Cstruct.t ->
intval decompress_payload : Msgpck.String.buf_in -> string optionval decompress_payload_cstruct : src:Cstruct.t -> dst:Cstruct.t -> int optionval handle_tcp_connection : t -> [> `Flow | `R | `W ] Eio.Flow.source -> unitval read_to_eof : [> Eio.Flow.source_ty ] Eio.Flow.source -> Cstruct.t -> intval initiate_push_pull :
t ->
net:[> [> `Generic ] Eio.Net.ty ] Eio.Net.t ->
addr:Types.addr ->
(unit, [> `Connection_closed | `Invalid_response | `Unreachable ]) resultval run_tcp_listener : t -> unitval probe_member : t -> Membership.Member.t -> boolval indirect_probe : t -> Membership.Member.t -> boolval suspect_member : t -> Membership.Member.t -> unitval probe_cycle : t -> unitval run_protocol : t -> unitval create :
sw:Eio.Switch.t ->
config:Types.config ->
self:Types.node_info ->
udp_sock:[ `Generic ] Eio.Net.datagram_socket_ty Eio.Resource.t ->
tcp_listener:[ `Generic ] Eio.Net.listening_socket_ty Eio.Resource.t ->
clock:float Eio.Time.clock_ty Eio.Resource.t ->
mono_clock:Eio.Time.Mono.ty Eio.Resource.t ->
secure_random:Eio.Flow.source_ty Eio.Resource.t ->
(t, [> `Invalid_key ]) resultval shutdown : t -> unitval add_member : t -> Types.node_info -> unitval remove_member : t -> Types.node_id -> boolval local_node : t -> Types.node_infoval members : t -> Membership.Member.t listval member_count : t -> intval events : t -> Types.node_event Eio.Stream.tval stats : t -> Types.statsval broadcast : t -> topic:string -> payload:string -> unitval send_direct :
t ->
target:Types.node_id ->
topic:string ->
payload:string ->
(unit, [> `Unknown_node ]) resultval send_to_addr :
t ->
addr:Eio.Net.Sockaddr.datagram ->
topic:string ->
payload:string ->
unitval on_message : t -> (Types.node_info -> string -> string -> unit) -> unit