fix: correct expiration for discv4 lookup requests (#7996)

This commit is contained in:
Oliver Nordbjerg
2024-04-30 16:23:32 +02:00
committed by GitHub
parent b99d367c1a
commit d0973bb6dc
2 changed files with 9 additions and 2 deletions

View File

@ -197,6 +197,12 @@ impl Discv4ConfigBuilder {
self
}
/// Sets the expiration duration for lookup neighbor requests
pub fn lookup_neighbours_expiration(&mut self, duration: Duration) -> &mut Self {
self.config.neighbours_expiration = duration;
self
}
/// Sets the expiration duration for a bond with a peer
pub fn bond_expiration(&mut self, duration: Duration) -> &mut Self {
self.config.bond_expiration = duration;

View File

@ -1421,7 +1421,7 @@ impl Discv4Service {
let mut failed_lookups = Vec::new();
self.pending_lookup.retain(|node_id, (lookup_sent_at, _)| {
if now.duration_since(*lookup_sent_at) > self.config.ping_expiration {
if now.duration_since(*lookup_sent_at) > self.config.request_timeout {
failed_lookups.push(*node_id);
return false
}
@ -1441,7 +1441,7 @@ impl Discv4Service {
fn evict_failed_neighbours(&mut self, now: Instant) {
let mut failed_neighbours = Vec::new();
self.pending_find_nodes.retain(|node_id, find_node_request| {
if now.duration_since(find_node_request.sent_at) > self.config.request_timeout {
if now.duration_since(find_node_request.sent_at) > self.config.neighbours_expiration {
if !find_node_request.answered {
// node actually responded but with fewer entries than expected, but we don't
// treat this as an hard error since it responded.
@ -2549,6 +2549,7 @@ mod tests {
let config = Discv4Config::builder()
.request_timeout(Duration::from_millis(200))
.ping_expiration(Duration::from_millis(200))
.lookup_neighbours_expiration(Duration::from_millis(200))
.add_eip868_pair("eth", fork_id)
.build();
let (_disv4, mut service) = create_discv4_with_config(config).await;