@@ -1366,6 +1366,8 @@ where
13661366 tracing:: error!( peer_id = %peer_id, "Peer non-existent when handling graft" ) ;
13671367 return ;
13681368 } ;
1369+ // Needs to be here to comply with the borrow checker.
1370+ let is_outbound = connected_peer. outbound ;
13691371
13701372 // For each topic, if a peer has grafted us, then we necessarily must be in their mesh
13711373 // and they must be subscribed to the topic. Ensure we have recorded the mapping.
@@ -1453,9 +1455,10 @@ where
14531455 }
14541456
14551457 // check mesh upper bound and only allow graft if the upper bound is not reached
1458+ // or if it is an outbound peer
14561459 let mesh_n_high = self . config . mesh_n_high_for_topic ( & topic_hash) ;
14571460
1458- if peers. len ( ) >= mesh_n_high {
1461+ if peers. len ( ) >= mesh_n_high && !is_outbound {
14591462 to_prune_topics. insert ( topic_hash. clone ( ) ) ;
14601463 continue ;
14611464 }
@@ -2225,9 +2228,7 @@ where
22252228 score_p1. partial_cmp ( & score_p2) . unwrap_or ( Ordering :: Equal )
22262229 } ) ;
22272230 // shuffle everything except the last retain_scores many peers (the best ones)
2228- if peers. len ( ) > self . config . retain_scores ( ) {
2229- shuffled[ ..peers. len ( ) - self . config . retain_scores ( ) ] . shuffle ( & mut rng) ;
2230- }
2231+ shuffled[ ..peers. len ( ) - self . config . retain_scores ( ) ] . shuffle ( & mut rng) ;
22312232
22322233 // count total number of outbound peers
22332234 let mut outbound = shuffled
0 commit comments