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:
parent
79ae54625d
commit
c05c739475
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user