From 1c348d52eadde8ae55ce5ed42e9d964afdd12397 Mon Sep 17 00:00:00 2001 From: Jude Nelson Date: Tue, 6 Feb 2024 14:24:12 -0500 Subject: [PATCH] feat: track neighbors with stale views --- stackslib/src/net/stackerdb/sync.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/stackslib/src/net/stackerdb/sync.rs b/stackslib/src/net/stackerdb/sync.rs index 6489ebc3a..e79195e5f 100644 --- a/stackslib/src/net/stackerdb/sync.rs +++ b/stackslib/src/net/stackerdb/sync.rs @@ -33,9 +33,9 @@ use crate::net::stackerdb::{ StackerDBConfig, StackerDBSync, StackerDBSyncResult, StackerDBSyncState, StackerDBs, }; use crate::net::{ - Error as net_error, NackData, Neighbor, NeighborAddress, NeighborKey, StackerDBChunkData, - StackerDBChunkInvData, StackerDBGetChunkData, StackerDBGetChunkInvData, StackerDBPushChunkData, - StacksMessageType, + Error as net_error, NackData, NackErrorCodes, Neighbor, NeighborAddress, NeighborKey, + StackerDBChunkData, StackerDBChunkInvData, StackerDBGetChunkData, StackerDBGetChunkInvData, + StackerDBPushChunkData, StacksMessageType, }; const MAX_CHUNKS_IN_FLIGHT: usize = 6; @@ -71,6 +71,7 @@ impl StackerDBSync { total_pushed: 0, last_run_ts: 0, need_resync: false, + stale_neighbors: HashSet::new(), }; dbsync.reset(None, config); dbsync @@ -177,6 +178,7 @@ impl StackerDBSync { chunks_to_store: chunks, dead: self.comms.take_dead_neighbors(), broken: self.comms.take_broken_neighbors(), + stale: std::mem::replace(&mut self.stale_neighbors, HashSet::new()), }; // keep all connected replicas, and replenish from config hints and the DB as needed @@ -678,6 +680,7 @@ impl StackerDBSync { &network.get_chain_view().rc_consensus_hash, &db_data.rc_consensus_hash ); + self.connected_replicas.remove(&naddr); continue; } db_data @@ -689,6 +692,10 @@ impl StackerDBSync { &naddr, data.error_code ); + self.connected_replicas.remove(&naddr); + if data.error_code == NackErrorCodes::StaleView { + self.stale_neighbors.insert(naddr); + } continue; } x => { @@ -802,10 +809,15 @@ impl StackerDBSync { &naddr, data.error_code ); + self.connected_replicas.remove(&naddr); + if data.error_code == NackErrorCodes::StaleView { + self.stale_neighbors.insert(naddr); + } continue; } x => { info!("Received unexpected message {:?}", &x); + self.connected_replicas.remove(&naddr); continue; } }; @@ -934,10 +946,14 @@ impl StackerDBSync { data.error_code ); self.connected_replicas.remove(&naddr); + if data.error_code == NackErrorCodes::StaleView { + self.stale_neighbors.insert(naddr); + } continue; } x => { info!("Received unexpected message {:?}", &x); + self.connected_replicas.remove(&naddr); continue; } }; @@ -1076,6 +1092,9 @@ impl StackerDBSync { data.error_code ); self.connected_replicas.remove(&naddr); + if data.error_code == NackErrorCodes::StaleView { + self.stale_neighbors.insert(naddr); + } continue; } x => {