@@ -5,7 +5,7 @@ use std::net::SocketAddr;
55use std:: path:: PathBuf ;
66use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
77use std:: sync:: Arc ;
8- use std:: time:: { Duration , SystemTime } ;
8+ use std:: time:: Duration ;
99use tokio:: sync:: { broadcast, Mutex } ;
1010use tokio:: task:: JoinSet ;
1111use tokio:: time;
@@ -57,8 +57,6 @@ pub struct PeerNetworkManager {
5757 tasks : Arc < Mutex < JoinSet < ( ) > > > ,
5858 /// Initial peer addresses
5959 initial_peers : Vec < SocketAddr > ,
60- /// When we first started needing peers (for DNS delay)
61- peer_search_started : Arc < Mutex < Option < SystemTime > > > ,
6260 /// Current sync peer (sticky during sync operations)
6361 current_sync_peer : Arc < Mutex < Option < SocketAddr > > > ,
6462 /// Data directory for storage
@@ -115,7 +113,6 @@ impl PeerNetworkManager {
115113 shutdown_token : CancellationToken :: new ( ) ,
116114 tasks : Arc :: new ( Mutex :: new ( JoinSet :: new ( ) ) ) ,
117115 initial_peers : config. peers . clone ( ) ,
118- peer_search_started : Arc :: new ( Mutex :: new ( None ) ) ,
119116 current_sync_peer : Arc :: new ( Mutex :: new ( None ) ) ,
120117 data_dir,
121118 mempool_strategy : config. mempool_strategy ,
@@ -774,7 +771,6 @@ impl PeerNetworkManager {
774771 let addrv2_handler = self . addrv2_handler . clone ( ) ;
775772 let peer_store = self . peer_store . clone ( ) ;
776773 let reputation_manager = self . reputation_manager . clone ( ) ;
777- let peer_search_started = self . peer_search_started . clone ( ) ;
778774 let initial_peers = self . initial_peers . clone ( ) ;
779775 let connected_peer_count = self . connected_peer_count . clone ( ) ;
780776
@@ -792,6 +788,9 @@ impl PeerNetworkManager {
792788
793789 let mut tasks = self . tasks . lock ( ) . await ;
794790 tasks. spawn ( async move {
791+ // Periodic DNS discovery check (only active in non-exclusive mode)
792+ let mut dns_interval = time:: interval ( DNS_DISCOVERY_DELAY ) ;
793+
795794 while !shutdown_token. is_cancelled ( ) {
796795 // Clean up disconnected peers
797796 pool. cleanup_disconnected ( ) . await ;
@@ -817,21 +816,6 @@ impl PeerNetworkManager {
817816 } else {
818817 // Normal mode: try to maintain minimum peer count with discovery
819818 if count < MIN_PEERS {
820- // Track when we first started needing peers
821- let mut search_started = peer_search_started. lock ( ) . await ;
822- if search_started. is_none ( ) {
823- * search_started = Some ( SystemTime :: now ( ) ) ;
824- log:: info!( "Below minimum peers ({}/{}), starting peer search (will try DNS after {}s)" , count, MIN_PEERS , DNS_DISCOVERY_DELAY . as_secs( ) ) ;
825- }
826- let search_time = match * search_started {
827- Some ( time) => time,
828- None => {
829- log:: error!( "Search time not set when expected" ) ;
830- continue ;
831- }
832- } ;
833- drop ( search_started) ;
834-
835819 // Try known addresses first, sorted by reputation
836820 let known = addrv2_handler. get_known_addresses ( ) . await ;
837821 let needed = TARGET_PEERS . saturating_sub ( count) ;
@@ -855,51 +839,6 @@ impl PeerNetworkManager {
855839 }
856840 }
857841
858- // If still need more, check if we can use DNS (after 10 second delay)
859- let count = pool. peer_count ( ) . await ;
860- if count < MIN_PEERS {
861- let elapsed = SystemTime :: now ( )
862- . duration_since ( search_time)
863- . unwrap_or_else ( |e| {
864- log:: warn!( "System time error calculating elapsed time: {}" , e) ;
865- Duration :: ZERO
866- } ) ;
867- if elapsed >= DNS_DISCOVERY_DELAY {
868- log:: info!( "Using DNS discovery after {}s delay" , elapsed. as_secs( ) ) ;
869- let dns_peers = tokio:: select! {
870- peers = discovery. discover_peers( network) => peers,
871- _ = shutdown_token. cancelled( ) => {
872- log:: info!( "Maintenance loop shutting down during DNS discovery" ) ;
873- break ;
874- }
875- } ;
876- let mut dns_attempted = 0 ;
877- for addr in dns_peers. into_iter ( ) {
878- if !pool. is_connected ( & addr) . await && !pool. is_connecting ( & addr) . await {
879- tokio:: select! {
880- _= connect_fn( addr) => { } ,
881- _ = shutdown_token. cancelled( ) => {
882- log:: info!( "Maintenance loop shutting down during connection attempt (dns)" ) ;
883- break ;
884- }
885- }
886- dns_attempted += 1 ;
887- if dns_attempted >= needed {
888- break ;
889- }
890- }
891- }
892- } else {
893- log:: debug!( "Waiting for DNS delay: {}s elapsed, need {}s" , elapsed. as_secs( ) , DNS_DISCOVERY_DELAY . as_secs( ) ) ;
894- }
895- }
896- } else {
897- // We have enough peers, reset the search timer
898- let mut search_started = peer_search_started. lock ( ) . await ;
899- if search_started. is_some ( ) {
900- log:: trace!( "Peer count restored, resetting DNS delay timer" ) ;
901- * search_started = None ;
902- }
903842 }
904843 }
905844
@@ -939,6 +878,36 @@ impl PeerNetworkManager {
939878 _ = time:: sleep( MAINTENANCE_INTERVAL ) => {
940879 log:: debug!( "Maintenance interval elapsed" ) ;
941880 }
881+ _ = dns_interval. tick( ) , if !exclusive_mode => {
882+ let count = pool. peer_count( ) . await ;
883+ if count >= MIN_PEERS {
884+ continue ;
885+ }
886+ let dns_peers = tokio:: select! {
887+ peers = discovery. discover_peers( network) => peers,
888+ _ = shutdown_token. cancelled( ) => {
889+ log:: info!( "Maintenance loop shutting down during DNS discovery" ) ;
890+ break ;
891+ }
892+ } ;
893+ let needed = TARGET_PEERS . saturating_sub( count) ;
894+ let mut dns_attempted = 0 ;
895+ for addr in dns_peers. iter( ) {
896+ if !pool. is_connected( addr) . await && !pool. is_connecting( addr) . await {
897+ tokio:: select! {
898+ _= connect_fn( * addr) => { } ,
899+ _ = shutdown_token. cancelled( ) => {
900+ log:: info!( "Maintenance loop shutting down during connection attempt (dns)" ) ;
901+ break ;
902+ }
903+ }
904+ dns_attempted += 1 ;
905+ if dns_attempted >= needed {
906+ break ;
907+ }
908+ }
909+ }
910+ }
942911 _ = shutdown_token. cancelled( ) => {
943912 log:: info!( "Maintenance loop shutting down" ) ;
944913 break ;
@@ -1326,7 +1295,6 @@ impl Clone for PeerNetworkManager {
13261295 shutdown_token : self . shutdown_token . clone ( ) ,
13271296 tasks : self . tasks . clone ( ) ,
13281297 initial_peers : self . initial_peers . clone ( ) ,
1329- peer_search_started : self . peer_search_started . clone ( ) ,
13301298 current_sync_peer : self . current_sync_peer . clone ( ) ,
13311299 data_dir : self . data_dir . clone ( ) ,
13321300 mempool_strategy : self . mempool_strategy ,
0 commit comments