@@ -64,8 +64,8 @@ use alloc::vec::Vec;
6464/// * Monitoring whether the [`ChannelManager`] needs to be re-persisted to disk, and if so,
6565/// writing it to disk/backups by invoking the callback given to it at startup.
6666/// [`ChannelManager`] persistence should be done in the background.
67- /// * Calling [`ChannelManager::timer_tick_occurred`] and [`PeerManager::timer_tick_occurred `]
68- /// at the appropriate intervals.
67+ /// * Calling [`ChannelManager::timer_tick_occurred`], [`ChainMonitor::rebroadcast_pending_claims `]
68+ /// and [`PeerManager::timer_tick_occurred`] at the appropriate intervals.
6969/// * Calling [`NetworkGraph::remove_stale_channels_and_tracking`] (if a [`GossipSync`] with a
7070/// [`NetworkGraph`] is provided to [`BackgroundProcessor::start`]).
7171///
@@ -116,12 +116,17 @@ const FIRST_NETWORK_PRUNE_TIMER: u64 = 60;
116116#[ cfg( test) ]
117117const FIRST_NETWORK_PRUNE_TIMER : u64 = 1 ;
118118
119+ #[ cfg( not( test) ) ]
120+ const REBROADCAST_TIMER : u64 = 30 ;
121+ #[ cfg( test) ]
122+ const REBROADCAST_TIMER : u64 = 1 ;
123+
119124#[ cfg( feature = "futures" ) ]
120125/// core::cmp::min is not currently const, so we define a trivial (and equivalent) replacement
121126const fn min_u64 ( a : u64 , b : u64 ) -> u64 { if a < b { a } else { b } }
122127#[ cfg( feature = "futures" ) ]
123128const FASTEST_TIMER : u64 = min_u64 ( min_u64 ( FRESHNESS_TIMER , PING_TIMER ) ,
124- min_u64 ( SCORER_PERSIST_TIMER , FIRST_NETWORK_PRUNE_TIMER ) ) ;
129+ min_u64 ( SCORER_PERSIST_TIMER , min_u64 ( FIRST_NETWORK_PRUNE_TIMER , REBROADCAST_TIMER ) ) ) ;
125130
126131/// Either [`P2PGossipSync`] or [`RapidGossipSync`].
127132pub enum GossipSync <
@@ -270,11 +275,14 @@ macro_rules! define_run_body {
270275 => { {
271276 log_trace!( $logger, "Calling ChannelManager's timer_tick_occurred on startup" ) ;
272277 $channel_manager. timer_tick_occurred( ) ;
278+ log_trace!( $logger, "Rebroadcasting monitor's pending claims on startup" ) ;
279+ $chain_monitor. rebroadcast_pending_claims( ) ;
273280
274281 let mut last_freshness_call = $get_timer( FRESHNESS_TIMER ) ;
275282 let mut last_ping_call = $get_timer( PING_TIMER ) ;
276283 let mut last_prune_call = $get_timer( FIRST_NETWORK_PRUNE_TIMER ) ;
277284 let mut last_scorer_persist_call = $get_timer( SCORER_PERSIST_TIMER ) ;
285+ let mut last_rebroadcast_call = $get_timer( REBROADCAST_TIMER ) ;
278286 let mut have_pruned = false ;
279287
280288 loop {
@@ -372,6 +380,12 @@ macro_rules! define_run_body {
372380 }
373381 last_scorer_persist_call = $get_timer( SCORER_PERSIST_TIMER ) ;
374382 }
383+
384+ if $timer_elapsed( & mut last_rebroadcast_call, REBROADCAST_TIMER ) {
385+ log_trace!( $logger, "Rebroadcasting monitor's pending claims" ) ;
386+ $chain_monitor. rebroadcast_pending_claims( ) ;
387+ last_rebroadcast_call = $get_timer( REBROADCAST_TIMER ) ;
388+ }
375389 }
376390
377391 // After we exit, ensure we persist the ChannelManager one final time - this avoids
@@ -1189,19 +1203,22 @@ mod tests {
11891203
11901204 #[ test]
11911205 fn test_timer_tick_called ( ) {
1192- // Test that ChannelManager's and PeerManager's `timer_tick_occurred` is called every
1193- // `FRESHNESS_TIMER`.
1206+ // Test that `ChannelManager::timer_tick_occurred` is called every `FRESHNESS_TIMER`,
1207+ // `ChainMonitor::rebroadcast_pending_claims` is called every `REBROADCAST_TIMER`, and
1208+ // `PeerManager::timer_tick_occurred` every `PING_TIMER`.
11941209 let nodes = create_nodes ( 1 , "test_timer_tick_called" . to_string ( ) ) ;
11951210 let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
11961211 let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
11971212 let event_handler = |_: _ | { } ;
11981213 let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , nodes[ 0 ] . no_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) , Some ( nodes[ 0 ] . scorer . clone ( ) ) ) ;
11991214 loop {
12001215 let log_entries = nodes[ 0 ] . logger . lines . lock ( ) . unwrap ( ) ;
1201- let desired_log = "Calling ChannelManager's timer_tick_occurred" . to_string ( ) ;
1202- let second_desired_log = "Calling PeerManager's timer_tick_occurred" . to_string ( ) ;
1203- if log_entries. get ( & ( "lightning_background_processor" . to_string ( ) , desired_log) ) . is_some ( ) &&
1204- log_entries. get ( & ( "lightning_background_processor" . to_string ( ) , second_desired_log) ) . is_some ( ) {
1216+ let desired_log_1 = "Calling ChannelManager's timer_tick_occurred" . to_string ( ) ;
1217+ let desired_log_2 = "Calling PeerManager's timer_tick_occurred" . to_string ( ) ;
1218+ let desired_log_3 = "Rebroadcasting monitor's pending claims" . to_string ( ) ;
1219+ if log_entries. get ( & ( "lightning_background_processor" . to_string ( ) , desired_log_1) ) . is_some ( ) &&
1220+ log_entries. get ( & ( "lightning_background_processor" . to_string ( ) , desired_log_2) ) . is_some ( ) &&
1221+ log_entries. get ( & ( "lightning_background_processor" . to_string ( ) , desired_log_3) ) . is_some ( ) {
12051222 break
12061223 }
12071224 }
0 commit comments