package octez-libs
Install
    
    dune-project
 Dependency
Authors
Maintainers
Sources
sha256=c6df840ebbf115e454db949028c595bec558a59a66cade73b52a6d099d6fa4d4
    
    
  sha512=d8aee903b9fe130d73176bc8ec38b78c9ff65317da3cb4f3415f09af0c625b4384e7498201fdb61aa39086a7d5d409d0ab3423f9bc3ab989a680cf444a79bc13
    
    
  doc/octez-libs.requester/Tezos_requester/Requester/Make/index.html
Module Requester.MakeSource
Parameters
module Disk_table : DISK_TABLE with type key := Hash.tmodule Memory_table : MEMORY_TABLE with type key := Hash.tSignature
include REQUESTER
  with type key = Hash.t
  with type value = Disk_table.value
  with type param = Probe.param
The indexed data
validation clue
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 Missing_data.
inject t k v returns false if 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 true
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.tfetch 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 notify. param is used to validate the notified value once it is received. (see also PROBE and notify).
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).
The "disk" storage
Configuration parameter to the Request service
type of values notified to the requester
Monitor all the fetched data. A given data will appear only once.
val notify : 
  t ->
  Tezos_base.TzPervasives.P2p_peer.Id.t ->
  key ->
  notified_value ->
  unit Lwt.tnotify t peer k nv notifies the requester that a value has been received for key k, from peer 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.
memory_table_length t returns the number of keys either known or pending in the memory table of t
val create : 
  ?random_table:bool ->
  ?global_input:(key * value) Lwt_watcher.input ->
  request_param ->
  store ->
  tcreate ?random_table ?global_input r s creates a requester. r is the configuration parameter passed to Request functions.
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.