@@ -33,9 +33,9 @@ use crate::net::stackerdb::{
33
33
StackerDBConfig , StackerDBSync , StackerDBSyncResult , StackerDBSyncState , StackerDBs ,
34
34
} ;
35
35
use crate :: net:: {
36
- Error as net_error, NackData , Neighbor , NeighborAddress , NeighborKey , StackerDBChunkData ,
37
- StackerDBChunkInvData , StackerDBGetChunkData , StackerDBGetChunkInvData , StackerDBPushChunkData ,
38
- StacksMessageType ,
36
+ Error as net_error, NackData , NackErrorCodes , Neighbor , NeighborAddress , NeighborKey ,
37
+ StackerDBChunkData , StackerDBChunkInvData , StackerDBGetChunkData , StackerDBGetChunkInvData ,
38
+ StackerDBPushChunkData , StacksMessageType ,
39
39
} ;
40
40
41
41
const MAX_CHUNKS_IN_FLIGHT : usize = 6 ;
@@ -72,6 +72,7 @@ impl<NC: NeighborComms> StackerDBSync<NC> {
72
72
total_pushed : 0 ,
73
73
last_run_ts : 0 ,
74
74
need_resync : false ,
75
+ stale_neighbors : HashSet :: new ( ) ,
75
76
} ;
76
77
dbsync. reset ( None , config) ;
77
78
dbsync
@@ -178,6 +179,7 @@ impl<NC: NeighborComms> StackerDBSync<NC> {
178
179
chunks_to_store : chunks,
179
180
dead : self . comms . take_dead_neighbors ( ) ,
180
181
broken : self . comms . take_broken_neighbors ( ) ,
182
+ stale : std:: mem:: replace ( & mut self . stale_neighbors , HashSet :: new ( ) ) ,
181
183
} ;
182
184
183
185
// keep all connected replicas, and replenish from config hints and the DB as needed
@@ -677,6 +679,7 @@ impl<NC: NeighborComms> StackerDBSync<NC> {
677
679
& network. get_chain_view( ) . rc_consensus_hash,
678
680
& db_data. rc_consensus_hash
679
681
) ;
682
+ self . connected_replicas . remove ( & naddr) ;
680
683
continue ;
681
684
}
682
685
db_data
@@ -688,6 +691,10 @@ impl<NC: NeighborComms> StackerDBSync<NC> {
688
691
& naddr,
689
692
data. error_code
690
693
) ;
694
+ self . connected_replicas . remove ( & naddr) ;
695
+ if data. error_code == NackErrorCodes :: StaleView {
696
+ self . stale_neighbors . insert ( naddr) ;
697
+ }
691
698
continue ;
692
699
}
693
700
x => {
@@ -800,10 +807,15 @@ impl<NC: NeighborComms> StackerDBSync<NC> {
800
807
& naddr,
801
808
data. error_code
802
809
) ;
810
+ self . connected_replicas . remove ( & naddr) ;
811
+ if data. error_code == NackErrorCodes :: StaleView {
812
+ self . stale_neighbors . insert ( naddr) ;
813
+ }
803
814
continue ;
804
815
}
805
816
x => {
806
817
info ! ( "Received unexpected message {:?}" , & x) ;
818
+ self . connected_replicas . remove ( & naddr) ;
807
819
continue ;
808
820
}
809
821
} ;
@@ -929,10 +941,14 @@ impl<NC: NeighborComms> StackerDBSync<NC> {
929
941
data. error_code
930
942
) ;
931
943
self . connected_replicas . remove ( & naddr) ;
944
+ if data. error_code == NackErrorCodes :: StaleView {
945
+ self . stale_neighbors . insert ( naddr) ;
946
+ }
932
947
continue ;
933
948
}
934
949
x => {
935
950
info ! ( "Received unexpected message {:?}" , & x) ;
951
+ self . connected_replicas . remove ( & naddr) ;
936
952
continue ;
937
953
}
938
954
} ;
@@ -1072,6 +1088,9 @@ impl<NC: NeighborComms> StackerDBSync<NC> {
1072
1088
data. error_code
1073
1089
) ;
1074
1090
self . connected_replicas . remove ( & naddr) ;
1091
+ if data. error_code == NackErrorCodes :: StaleView {
1092
+ self . stale_neighbors . insert ( naddr) ;
1093
+ }
1075
1094
continue ;
1076
1095
}
1077
1096
x => {
0 commit comments