@@ -828,7 +828,7 @@ impl Peer {
828
828
}
829
829
match self . sync_status {
830
830
InitSyncTracker :: NoSyncRequested => true ,
831
- InitSyncTracker :: ChannelsSyncing ( i) => i < channel_id ,
831
+ InitSyncTracker :: ChannelsSyncing ( i) => channel_id < i ,
832
832
InitSyncTracker :: NodesSyncing ( _) => true ,
833
833
}
834
834
}
@@ -4403,6 +4403,80 @@ mod tests {
4403
4403
assert_eq ! ( cfgs[ 1 ] . routing_handler. chan_anns_recvd. load( Ordering :: Acquire ) , 54 ) ;
4404
4404
}
4405
4405
4406
+ #[ test]
4407
+ fn test_forward_while_syncing ( ) {
4408
+ use crate :: ln:: peer_handler:: tests:: test_utils:: get_dummy_channel_update;
4409
+
4410
+ // Test forwarding new channel announcements while we're doing syncing.
4411
+ let cfgs = create_peermgr_cfgs ( 2 ) ;
4412
+ cfgs[ 0 ] . routing_handler . request_full_sync . store ( true , Ordering :: Release ) ;
4413
+ cfgs[ 1 ] . routing_handler . request_full_sync . store ( true , Ordering :: Release ) ;
4414
+ cfgs[ 0 ] . routing_handler . announcement_available_for_sync . store ( true , Ordering :: Release ) ;
4415
+ cfgs[ 1 ] . routing_handler . announcement_available_for_sync . store ( true , Ordering :: Release ) ;
4416
+ let peers = create_network ( 2 , & cfgs) ;
4417
+
4418
+ let ( mut fd_a, mut fd_b) = establish_connection ( & peers[ 0 ] , & peers[ 1 ] ) ;
4419
+
4420
+ // Iterate a handful of times to exchange some messages
4421
+ for _ in 0 ..150 {
4422
+ peers[ 1 ] . process_events ( ) ;
4423
+ let a_read_data = fd_b. outbound_data . lock ( ) . unwrap ( ) . split_off ( 0 ) ;
4424
+ assert ! ( !a_read_data. is_empty( ) ) ;
4425
+
4426
+ peers[ 0 ] . read_event ( & mut fd_a, & a_read_data) . unwrap ( ) ;
4427
+ peers[ 0 ] . process_events ( ) ;
4428
+
4429
+ let b_read_data = fd_a. outbound_data . lock ( ) . unwrap ( ) . split_off ( 0 ) ;
4430
+ assert ! ( !b_read_data. is_empty( ) ) ;
4431
+ peers[ 1 ] . read_event ( & mut fd_b, & b_read_data) . unwrap ( ) ;
4432
+
4433
+ peers[ 0 ] . process_events ( ) ;
4434
+ assert_eq ! (
4435
+ fd_a. outbound_data. lock( ) . unwrap( ) . len( ) ,
4436
+ 0 ,
4437
+ "Until A receives data, it shouldn't send more messages"
4438
+ ) ;
4439
+ }
4440
+
4441
+ // Forward one more gossip backfill message but don't flush it so that we can examine the
4442
+ // unencrypted message for broadcasts.
4443
+ fd_b. hang_writes . store ( true , Ordering :: Relaxed ) ;
4444
+ peers[ 1 ] . process_events ( ) ;
4445
+
4446
+ {
4447
+ let peer_lock = peers[ 1 ] . peers . read ( ) . unwrap ( ) ;
4448
+ let peer = peer_lock. get ( & fd_b) . unwrap ( ) . lock ( ) . unwrap ( ) ;
4449
+ assert_eq ! ( peer. pending_outbound_buffer. len( ) , 1 ) ;
4450
+ assert_eq ! ( peer. gossip_broadcast_buffer. len( ) , 0 ) ;
4451
+ }
4452
+
4453
+ // At this point we should have sent channel announcements up to roughly SCID 150. Now
4454
+ // build an updated update for SCID 100 and SCID 5000 and make sure only the one for SCID
4455
+ // 100 gets forwarded
4456
+ let msg_100 = get_dummy_channel_update ( 100 ) ;
4457
+ let msg_ev_100 = MessageSendEvent :: BroadcastChannelUpdate { msg : msg_100. clone ( ) } ;
4458
+
4459
+ let msg_5000 = get_dummy_channel_update ( 5000 ) ;
4460
+ let msg_ev_5000 = MessageSendEvent :: BroadcastChannelUpdate { msg : msg_5000 } ;
4461
+
4462
+ fd_a. hang_writes . store ( true , Ordering :: Relaxed ) ;
4463
+
4464
+ cfgs[ 1 ] . routing_handler . pending_events . lock ( ) . unwrap ( ) . push ( msg_ev_100) ;
4465
+ cfgs[ 1 ] . routing_handler . pending_events . lock ( ) . unwrap ( ) . push ( msg_ev_5000) ;
4466
+ peers[ 1 ] . process_events ( ) ;
4467
+
4468
+ {
4469
+ let peer_lock = peers[ 1 ] . peers . read ( ) . unwrap ( ) ;
4470
+ let peer = peer_lock. get ( & fd_b) . unwrap ( ) . lock ( ) . unwrap ( ) ;
4471
+ assert_eq ! ( peer. pending_outbound_buffer. len( ) , 1 ) ;
4472
+ assert_eq ! ( peer. gossip_broadcast_buffer. len( ) , 1 ) ;
4473
+
4474
+ let pending_msg = & peer. gossip_broadcast_buffer [ 0 ] ;
4475
+ let expected = encode_msg ! ( & msg_100) ;
4476
+ assert_eq ! ( expected, pending_msg. fetch_encoded_msg_with_type_pfx( ) ) ;
4477
+ }
4478
+ }
4479
+
4406
4480
#[ test]
4407
4481
fn test_handshake_timeout ( ) {
4408
4482
// Tests that we time out a peer still waiting on handshake completion after a full timer
0 commit comments