type key = H.t
The index key
type value = P.value
The indexed data
know t k returns true iff the key is present in the memory table or the disk.
Return value if it is found in-memory, or else on disk. Otherwise fail with error
inject t k v returns
k is already present in the memory table or in the disk, or has already been requested. Otherwise it updates the memory table and return
val fetch : t -> ?peer:Tezos_base.TzPervasives.P2p_peer.Id.t -> ?timeout:Tezos_base.TzPervasives.Time.System.Span.t -> key -> param -> value Tezos_base.TzPervasives.tzresult Lwt.t
fetch t ?peer ?timeout k param returns the value when it is known. It can fail with
Timeout k if
timeout is provided and the value isn't know before the timeout expires. It can fail with
Cancel if the request is canceled.
The key is first looked up in memory, then on disk. If not present and not already requested, it schedules a request, and blocks until the requester is notified with
param is used to validate the notified value once it is received. (see also
Requests are re-sent via a 1.5 exponential back-off, with initial delay set to
Request.initial_delay. If the function is called multiple time with the same key but with distinct peers, the internal scheduler randomly chooses the requested peer (at each retry).
type store = Disk_memory_table(P).store
The "disk" storage
type notified_value = P.value
type of values notified to the requester
Monitor all the fetched data. A given data will appear only once.
notify t peer k nv notifies the requester that a value has been received for key
k, from peer
nv is a *notified value*. The notified value is validated using
Probe.probe, and the
param provided at fetching time (see
PROBE). If valid, the memory table is updated and all promises waiting on this key are resolved.
If the key is not pending the notification is ignored.
val memory_table_length : t -> int
memory_table_length t returns the number of keys either known or pending in the memory table of
val pending_requests : t -> int
Returns the number of requests currently pending
val create : ?random_table:bool -> ?global_input:(key * value) Lwt_watcher.input -> request_param -> store -> t
create ?random_table ?global_input r s creates a requester.
r is the configuration parameter passed to
The value for
random_table determines whether the underlying hashtable randomises its hash (see
Stdlib.Hashtbl.create and specifically the documentation of the
random parameter). The default depends on environment variables and
Stdlib.Hashtbl.randomize has been called.