@@ -234,6 +234,13 @@ enum InitSyncTracker{
234234 NodesSyncing ( PublicKey ) ,
235235}
236236
237+ /// When the outbound buffer has this many messages, we'll stop reading bytes from the peer until
238+ /// we manage to send messages until we reach this limit.
239+ const OUTBOUND_BUFFER_LIMIT_READ_PAUSE : usize = 10 ;
240+ /// When the outbound buffer has this many messages, we'll simply skip relaying gossip messages to
241+ /// the peer.
242+ const OUTBOUND_BUFFER_LIMIT_DROP_GOSSIP : usize = 20 ;
243+
237244struct Peer {
238245 channel_encryptor : PeerChannelEncryptor ,
239246 their_node_id : Option < PublicKey > ,
@@ -532,13 +539,12 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
532539 }
533540 }
534541 }
535- const MSG_BUFF_SIZE : usize = 10 ;
536542 while !peer. awaiting_write_event {
537- if peer. pending_outbound_buffer . len ( ) < MSG_BUFF_SIZE {
543+ if peer. pending_outbound_buffer . len ( ) < OUTBOUND_BUFFER_LIMIT_READ_PAUSE {
538544 match peer. sync_status {
539545 InitSyncTracker :: NoSyncRequested => { } ,
540546 InitSyncTracker :: ChannelsSyncing ( c) if c < 0xffff_ffff_ffff_ffff => {
541- let steps = ( ( MSG_BUFF_SIZE - peer. pending_outbound_buffer . len ( ) + 2 ) / 3 ) as u8 ;
547+ let steps = ( ( OUTBOUND_BUFFER_LIMIT_READ_PAUSE - peer. pending_outbound_buffer . len ( ) + 2 ) / 3 ) as u8 ;
542548 let all_messages = self . message_handler . route_handler . get_next_channel_announcements ( c, steps) ;
543549 for & ( ref announce, ref update_a_option, ref update_b_option) in all_messages. iter ( ) {
544550 encode_and_send_msg ! ( announce) ;
@@ -555,7 +561,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
555561 }
556562 } ,
557563 InitSyncTracker :: ChannelsSyncing ( c) if c == 0xffff_ffff_ffff_ffff => {
558- let steps = ( MSG_BUFF_SIZE - peer. pending_outbound_buffer . len ( ) ) as u8 ;
564+ let steps = ( OUTBOUND_BUFFER_LIMIT_READ_PAUSE - peer. pending_outbound_buffer . len ( ) ) as u8 ;
559565 let all_messages = self . message_handler . route_handler . get_next_node_announcements ( None , steps) ;
560566 for msg in all_messages. iter ( ) {
561567 encode_and_send_msg ! ( msg) ;
@@ -567,7 +573,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
567573 } ,
568574 InitSyncTracker :: ChannelsSyncing ( _) => unreachable ! ( ) ,
569575 InitSyncTracker :: NodesSyncing ( key) => {
570- let steps = ( MSG_BUFF_SIZE - peer. pending_outbound_buffer . len ( ) ) as u8 ;
576+ let steps = ( OUTBOUND_BUFFER_LIMIT_READ_PAUSE - peer. pending_outbound_buffer . len ( ) ) as u8 ;
571577 let all_messages = self . message_handler . route_handler . get_next_node_announcements ( Some ( & key) , steps) ;
572578 for msg in all_messages. iter ( ) {
573579 encode_and_send_msg ! ( msg) ;
@@ -586,7 +592,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
586592 Some ( buff) => buff,
587593 } ;
588594
589- let should_be_reading = peer. pending_outbound_buffer . len ( ) < MSG_BUFF_SIZE ;
595+ let should_be_reading = peer. pending_outbound_buffer . len ( ) < OUTBOUND_BUFFER_LIMIT_READ_PAUSE ;
590596 let pending = & next_buff[ peer. pending_outbound_buffer_first_msg_offset ..] ;
591597 let data_sent = descriptor. send_data ( pending, should_be_reading) ;
592598 peer. pending_outbound_buffer_first_msg_offset += data_sent;
@@ -815,7 +821,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
815821 }
816822 }
817823
818- peer. pending_outbound_buffer . len ( ) > 10 // pause_read
824+ peer. pending_outbound_buffer . len ( ) > OUTBOUND_BUFFER_LIMIT_READ_PAUSE // pause_read
819825 }
820826 } ;
821827
@@ -1028,6 +1034,9 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
10281034 !peer. should_forward_channel_announcement ( msg. contents . short_channel_id ) {
10291035 continue
10301036 }
1037+ if peer. pending_outbound_buffer . len ( ) > OUTBOUND_BUFFER_LIMIT_DROP_GOSSIP {
1038+ continue ;
1039+ }
10311040 if peer. their_node_id . as_ref ( ) == Some ( & msg. contents . node_id_1 ) ||
10321041 peer. their_node_id . as_ref ( ) == Some ( & msg. contents . node_id_2 ) {
10331042 continue ;
@@ -1047,6 +1056,9 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
10471056 !peer. should_forward_node_announcement ( msg. contents . node_id ) {
10481057 continue
10491058 }
1059+ if peer. pending_outbound_buffer . len ( ) > OUTBOUND_BUFFER_LIMIT_DROP_GOSSIP {
1060+ continue ;
1061+ }
10501062 if peer. their_node_id . as_ref ( ) == Some ( & msg. contents . node_id ) {
10511063 continue ;
10521064 }
@@ -1065,6 +1077,9 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
10651077 !peer. should_forward_channel_announcement ( msg. contents . short_channel_id ) {
10661078 continue
10671079 }
1080+ if peer. pending_outbound_buffer . len ( ) > OUTBOUND_BUFFER_LIMIT_DROP_GOSSIP {
1081+ continue ;
1082+ }
10681083 if except_node. is_some ( ) && peer. their_node_id . as_ref ( ) == except_node {
10691084 continue ;
10701085 }
0 commit comments