Distributed_db: reset next_request delay

When registring a new peer as a provider for a ressource,
reset the next request delay.
This commit is contained in:
Grégoire Henry 2017-09-29 18:43:13 +02:00 committed by Benjamin Canou
parent 79ae54625d
commit c05c739475

View File

@ -299,7 +299,10 @@ end = struct
let delay = next -. now in let delay = next -. now in
if delay <= 0. then Lwt.return_unit else Lwt_unix.sleep delay if delay <= 0. then Lwt.return_unit else Lwt_unix.sleep delay
let process_event state = function (* TODO should depend on the ressource kind... *)
let initial_delay = 0.1
let process_event state now = function
| Request (peer, key) -> begin | Request (peer, key) -> begin
try try
let data = Table.find state.pending key in let data = Table.find state.pending key in
@ -307,7 +310,11 @@ end = struct
match peer with match peer with
| None -> data.peers | None -> data.peers
| Some peer -> P2p.Peer_id.Set.add peer data.peers in | Some peer -> P2p.Peer_id.Set.add peer data.peers in
Table.replace state.pending key { data with peers } ; Table.replace state.pending key {
delay = initial_delay ;
next_request = min data.next_request (now +. initial_delay) ;
peers ;
} ;
Lwt.return_unit Lwt.return_unit
with Not_found -> with Not_found ->
let peers = let peers =
@ -316,8 +323,8 @@ end = struct
| Some peer -> P2p.Peer_id.Set.singleton peer in | Some peer -> P2p.Peer_id.Set.singleton peer in
Table.add state.pending key { Table.add state.pending key {
peers ; peers ;
next_request = Unix.gettimeofday () ; next_request = now ;
delay = 1.0 ; delay = initial_delay ;
} ; } ;
Lwt.return_unit Lwt.return_unit
end end
@ -337,9 +344,10 @@ end = struct
if Lwt.state shutdown <> Lwt.Sleep then if Lwt.state shutdown <> Lwt.Sleep then
Lwt.return_unit Lwt.return_unit
else if Lwt.state state.events <> Lwt.Sleep then else if Lwt.state state.events <> Lwt.Sleep then
let now = Unix.gettimeofday () in
state.events >>= fun events -> state.events >>= fun events ->
state.events <- state.wait_events () ; state.events <- state.wait_events () ;
Lwt_list.iter_s (process_event state) events >>= fun () -> Lwt_list.iter_s (process_event state now) events >>= fun () ->
worker_loop state worker_loop state
else else
let now = Unix.gettimeofday () in let now = Unix.gettimeofday () in