Tezos_p2p.P2p_io_schedulerScheduling of I/O operations over file descriptors.
This module defines the scheduler type t, and connection type connection. A connection is a wrapper over a P2p_fd.t. R/W functions over connections behave like regular R/W over file descriptors, but the scheduler ensures of fair allocation of bandwidth between them.
To each connection is associated a read (resp. write) queue where data is copied to (resp. read from), at a rate of max_download_speed / num_connections (resp. max_upload_speed / num_connections).
val create :
?max_upload_speed:int ->
?max_download_speed:int ->
?read_queue_size:int ->
?write_queue_size:int ->
read_buffer_size:int ->
unit ->
t Tezos_base.TzPervasives.tzresult Lwt.tcreate ~max_upload_speed ~max_download_speed ~read_queue_size ~write_queue_size () is an IO scheduler with specified (global) max upload (resp. download) speed, and specified read (resp. write) queue sizes (in bytes) for connections.
val ma_state : t -> Tezos_stdlib_unix.Moving_average.statema_state sched returns the state of the moving average worker.
val register : t -> P2p_fd.t -> connectionregister sched fd is a connection managed by sched.
val write :
?canceler:Lwt_canceler.t ->
connection ->
Tezos_base.TzPervasives.Bytes.t ->
unit Tezos_base.TzPervasives.tzresult Lwt.twrite conn msg returns Ok () when msg has been added to conn's write queue, or fail with an error.
val write_now : connection -> Tezos_base.TzPervasives.Bytes.t -> boolwrite_now conn msg is true iff msg has been (immediately) added to conn's write queue, false if it has been dropped.
val set_peer_id :
peer_id:Tezos_base.TzPervasives.P2p_peer.Id.t ->
connection ->
unitset_peer_id ~peer_id conn sets the peer id where conn is connected to.
val to_readable : connection -> P2p_buffer_reader.readableReturns the readable of an abstract connection
val stat : connection -> Tezos_base.TzPervasives.P2p_stat.tstat conn is a snapshot of current bandwidth usage for conn.
val global_stat : t -> Tezos_base.TzPervasives.P2p_stat.tglobal_stat sched is a snapshot of sched's bandwidth usage (sum of stat conn for each conn in sched).
val iter_connection : t -> (connection -> unit) -> unititer_connection sched f applies f on each connection managed by sched.
val add_closing_reason :
reason:P2p_disconnection_reason.t ->
connection ->
unitStores a reason for which it will be closed in a near future.
val close :
?timeout:float ->
?reason:P2p_disconnection_reason.t ->
connection ->
unit Tezos_base.TzPervasives.tzresult Lwt.tclose ?reason conn set the closing reason and returns after any pending data has been sent and the canceler of conn has been triggered.
It does not wait for the canceler callbacks, so there is no guarantee that the file descriptor is already closed, but it will eventually be closed.
If timeout is set, the canceler will be triggered after the timeout, even if pending data remains to be sent.
val shutdown : ?timeout:float -> t -> unit Lwt.tshutdown sched returns after all connections managed by sched have been closed and sched's inner worker has successfully canceled.
val id : connection -> intid connection returns the identifier of the underlying P2p_fd.t file descriptor. This uniquely identifies a connection.