Library for pooling resources like connections, threads, or similar
Module type
Class type
Library resource-pooling


module Conf : CONF


type server_status = {
serverid : Conf.serverid;
desired : int;
current : int;
essential : bool;
suspended : bool;
check_server : unit -> bool Lwt.t;
connections : Conf.connection Resource_pool.t;
val servers : unit -> Conf.serverid list
val server_statuses : unit -> server_status list
val server_exists : Conf.serverid -> bool
val remove : Conf.serverid -> unit

remove marks a given server as removed from the pool. HOWEVER, a number of attempts (corresponding to the number of connections to that server) to use that server might still occur. These are NOT connection attempts, so this does not come with substantial costs.

val non_essential_active_connection_pools : unit -> (Conf.serverid * Conf.connection Resource_pool.t) list
val add_one : ?essential:bool -> ?connect_immediately:bool -> num_conn:int -> Conf.serverid -> Conf.server -> unit

Adds a server to the pool, permitting a maximum number num_conn of concurrent connections to that server. If connect_immediately is true (default: false then num_conn are immediately opened to the server. If the given server exists already no action is taken. If essential is true (default: true) then the added server is protected from being suspended.

val add_many : ?essential:bool -> ?connect_immediately:bool -> num_conn:int -> (Conf.serverid * Conf.server) list -> unit
val add_existing : ?essential:bool -> ?check_server:( unit -> bool Lwt.t ) -> num_conn:int -> Conf.serverid -> Conf.connection Resource_pool.t -> unit
val use : ?usage_attempts:int -> ( Conf.connection -> 'a Lwt.t ) -> 'a Lwt.t