Synchronisation_heuristic.Bootstrapping
This module inherits from Core
and handle a bootstrapped flag as well as Lwt
callbacks when the status of heuristic or the bootstrap flag changes.
The bootstrap flag is set to true
in two cases:
Synchronised
for the first timeforce_bootstrapped state b
is called with b = true
Only the function force_bootstrapped
can set the boolean flag to false
.
val create :
?when_bootstrapped_changes:(bool -> unit Lwt.t) ->
?when_status_changes:(status -> unit Lwt.t) ->
threshold:int ->
latency:int ->
unit ->
t
create ?when_bootstrapped_changes ?when_status_changes ~threshold ~latency ()
is a wrapper around Core.create ~threshold ~latency ()
.
when_status_changes
is a callback called immediately when the status changes (as a result of some calls to update
) and when the status is first set (as a result of calling activate
).when_bootstrapped_changes
is a callback called immediately when the bootstrap flagged changes (as a result of some calls to update
or to force_bootstrapped
) or when the flag is first set (as a result of calling activate
).val activate : t -> unit Lwt.t
activate state
activates the heuristics. It sets the status and the bootstrap flag to their initial values (which depend on the initial value of threshold
) and calls the when_status_changes
and when_bootstrapped_changes
callbacks with these initial values.
This function is intended to be used once, after the call to create
and before the first call to update
.
val update :
t ->
(Mavryk_base.Time.Protocol.t * Mavryk_base.P2p_peer.Id.t) ->
unit Lwt.t
update state candidate
is a wrapper around Core.update
. If an update
changes the status of the core heuristic, the when_status_changes
callback is called. Similarly, if an update
changes the bootstrap flag, the when_bootstrapped_changes
callback is called.
val is_bootstrapped : t -> bool
is_bootstrapped state
returns the value of the bootstrap flag.
val force_bootstrapped : t -> bool -> unit Lwt.t
force_bootstrapped state b
forces the status of the bootstrap flag. If the value of the flag changes as a result, the callback when_bootstrapped_changes
is called.
val bootstrapped : t -> unit Lwt.t
bootstrapped state
is a promise that becomes fulfilled when the current bootstrap flag becomes true
. If the bootstrap flag is already true
, the promise is already resolved.