module ManagedSet:sig..end
type mset
typemset_policy =[ `Balance_load | `Failover ]
services array passed to create_mset:`Failover: Picks an element from the first service
in services that is enabled and has free capacity.
That means that the first service is preferred until it is
maxed out or it fails, then the second service is preferred,
and so on.`Balance_load: Picks an element from the service in
services that is enabled and has the lowest load.type mset_config = {
|
mset_mclient_config : |
(* | The mclient config | *) |
|
mset_policy : |
(* | The policy | *) |
|
mset_pending_calls_max : |
(* | When an mclient processes this number of calls at the same time, it is considered as fully busy. (Value must by > 0). | *) |
|
mset_pending_calls_norm : |
(* | When an mclient processes less than this number of calls, its load is considered as too light, and it is tried to put more load on this client before opening another one | *) |
|
mset_idempotent_max : |
(* | How often idempotent procedures may be tried to be called. A negative value means infinite. | *) |
|
mset_idempotent_wait : |
(* | Wait this number of seconds before trying again | *) |
mset_pick when no available endpoint can be found,
or all available endpoints have reached their maximum load.val create_mset_config : ?mclient_config:Rpc_proxy.ManagedClient.mclient_config ->
?policy:mset_policy ->
?pending_calls_max:int ->
?pending_calls_norm:int ->
?idempotent_max:int ->
?idempotent_wait:float -> unit -> mset_configmclient_config: The default mclient configpolicy: `Balance_loadpending_calls_max: max_intpending_calls_norm: 1idempotent_max: 3idempotent_wait: 5.0val create_mset : mset_config ->
(Rpc_client.connector * int) array ->
Unixqueue.event_system -> msetcreate_mset config services: The mset is created with config,
and the services array describes which ports are available,
and how often each port may be contacted (i.e. max number of
connections).val mset_pick : ?from:int list ->
mset -> Rpc_proxy.ManagedClient.mclient * intCluster_service_unavailable.
The returned int is the index in the mset_services array.
If from is given, not all specified mclients qualify for this
call. In from one can pass a list of indexes pointing into
the mset_services array, and only from these mclients the
mclient is picked. For `Failover policies, the order given
in from is respected, and the mclients are checked from left
to right.
val mset_services : mset -> (Rpc_client.connector * int) arrayval mset_load : mset -> int arrayval event_system : mset -> Unixqueue.event_systemval shut_down : mset -> unitval sync_shutdown : mset -> unitval trigger_shutdown : mset -> (unit -> unit) -> unitRpc_client.shut_down, Rpc_client.sync_shutdown, and
Rpc_client.trigger_shutdownval idempotent_async_call : ?from:int list ->
mset ->
(Rpc_proxy.ManagedClient.mclient -> 'a -> ((unit -> 'b) -> unit) -> unit) ->
'a -> ((unit -> 'b) -> unit) -> unitidempotent_async_call
mset async_call arg emit: Picks a new
mclient and calls async_call mclient arg emit.
If the call leads to a fatal error, a new mclient
is picked, and the call is repeated. In total, the call may be
tried mset_idempotent_max times. It is recommended to set
rcache_threshold to 1 when using this function because this
enforces that a different mclient is picked when the first one
fails.
Note that a timeout is not considered as a fatal error by default;
one has to enable that by setting mclient_msg_timeout_is_fatal.
Note that this form of function is compatible with the
generated foo'async functions of the language mapping.
from has the same meaning as in mset_pick.
val idempotent_sync_call : ?from:int list ->
mset ->
(Rpc_proxy.ManagedClient.mclient -> 'a -> ((unit -> 'b) -> unit) -> unit) ->
'a -> 'b