@@ -1490,30 +1490,53 @@ mod tests {
14901490 peer_count_value ( peer_count, "connected" )
14911491 }
14921492
1493- fn peer_count_total ( peer_count : & serde_json:: Value ) -> u64 {
1494- peer_count_value ( peer_count, "connected" )
1495- + peer_count_value ( peer_count, "connecting" )
1496- + peer_count_value ( peer_count, "disconnected" )
1497- + peer_count_value ( peer_count, "disconnecting" )
1493+ fn peer_count_debug_row (
1494+ http_port : u16 ,
1495+ peer_count : & serde_json:: Value ,
1496+ ) -> ( u16 , u64 , u64 , u64 , u64 ) {
1497+ (
1498+ http_port,
1499+ peer_count_connected ( peer_count) ,
1500+ peer_count_value ( peer_count, "connecting" ) ,
1501+ peer_count_value ( peer_count, "disconnected" ) ,
1502+ peer_count_value ( peer_count, "disconnecting" ) ,
1503+ )
14981504 }
14991505
15001506 async fn wait_for_connected_beacon_peer (
15011507 http_ports : & [ u16 ] ,
15021508 ) -> Result < Vec < serde_json:: Value > , Vec < serde_json:: Value > > {
15031509 let start = Instant :: now ( ) ;
15041510 let timeout_duration = Duration :: from_secs ( 60 ) ;
1511+ let required_ready_polls = 3 ;
1512+ let mut ready_polls = 0 ;
15051513 loop {
15061514 let mut peer_counts = Vec :: new ( ) ;
15071515 for http_port in http_ports {
15081516 peer_counts. push ( wait_for_beacon_json ( * http_port, "/eth/v1/node/peer_count" ) . await ) ;
15091517 }
15101518
1511- let every_node_knows_a_peer =
1512- peer_counts. iter ( ) . all ( |count| peer_count_total ( count) > 0 ) ;
1513- let any_node_connected = peer_counts
1519+ let every_node_connected = peer_counts
1520+ . iter ( )
1521+ . all ( |count| peer_count_connected ( count) > 0 ) ;
1522+ let peer_count_summary = http_ports
15141523 . iter ( )
1515- . any ( |count| peer_count_connected ( count) > 0 ) ;
1516- if every_node_knows_a_peer && any_node_connected {
1524+ . copied ( )
1525+ . zip ( peer_counts. iter ( ) )
1526+ . map ( |( http_port, count) | peer_count_debug_row ( http_port, count) )
1527+ . collect :: < Vec < _ > > ( ) ;
1528+ info ! (
1529+ ready_polls,
1530+ required_ready_polls,
1531+ ?peer_count_summary,
1532+ "beacon e2e peer readiness poll"
1533+ ) ;
1534+ if every_node_connected {
1535+ ready_polls += 1 ;
1536+ } else {
1537+ ready_polls = 0 ;
1538+ }
1539+ if ready_polls >= required_ready_polls {
15171540 return Ok ( peer_counts) ;
15181541 }
15191542
@@ -2318,7 +2341,7 @@ mod tests {
23182341 assert ! (
23192342 peer_counts
23202343 . iter( )
2321- . any ( |count| peer_count_connected( count) > 0 ) ,
2344+ . all ( |count| peer_count_connected( count) > 0 ) ,
23222345 "beacon nodes did not report a connected peer: {peer_counts:?}"
23232346 ) ;
23242347 }
@@ -2565,7 +2588,7 @@ mod tests {
25652588 assert ! (
25662589 peer_counts
25672590 . iter( )
2568- . any ( |count| peer_count_connected( count) > 0 ) ,
2591+ . all ( |count| peer_count_connected( count) > 0 ) ,
25692592 "beacon nodes did not report a connected peer: {peer_counts:?}"
25702593 ) ;
25712594 info ! (
0 commit comments