@@ -64,8 +64,8 @@ use alloc::vec::Vec;
64
64
/// * Monitoring whether the [`ChannelManager`] needs to be re-persisted to disk, and if so,
65
65
/// writing it to disk/backups by invoking the callback given to it at startup.
66
66
/// [`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.
69
69
/// * Calling [`NetworkGraph::remove_stale_channels_and_tracking`] (if a [`GossipSync`] with a
70
70
/// [`NetworkGraph`] is provided to [`BackgroundProcessor::start`]).
71
71
///
@@ -116,12 +116,17 @@ const FIRST_NETWORK_PRUNE_TIMER: u64 = 60;
116
116
#[ cfg( test) ]
117
117
const FIRST_NETWORK_PRUNE_TIMER : u64 = 1 ;
118
118
119
+ #[ cfg( not( test) ) ]
120
+ const REBROADCAST_TIMER : u64 = 30 ;
121
+ #[ cfg( test) ]
122
+ const REBROADCAST_TIMER : u64 = 1 ;
123
+
119
124
#[ cfg( feature = "futures" ) ]
120
125
/// core::cmp::min is not currently const, so we define a trivial (and equivalent) replacement
121
126
const fn min_u64 ( a : u64 , b : u64 ) -> u64 { if a < b { a } else { b } }
122
127
#[ cfg( feature = "futures" ) ]
123
128
const 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 ) ) ) ;
125
130
126
131
/// Either [`P2PGossipSync`] or [`RapidGossipSync`].
127
132
pub enum GossipSync <
@@ -270,11 +275,14 @@ macro_rules! define_run_body {
270
275
=> { {
271
276
log_trace!( $logger, "Calling ChannelManager's timer_tick_occurred on startup" ) ;
272
277
$channel_manager. timer_tick_occurred( ) ;
278
+ log_trace!( $logger, "Rebroadcasting monitor's pending claims on startup" ) ;
279
+ $chain_monitor. rebroadcast_pending_claims( ) ;
273
280
274
281
let mut last_freshness_call = $get_timer( FRESHNESS_TIMER ) ;
275
282
let mut last_ping_call = $get_timer( PING_TIMER ) ;
276
283
let mut last_prune_call = $get_timer( FIRST_NETWORK_PRUNE_TIMER ) ;
277
284
let mut last_scorer_persist_call = $get_timer( SCORER_PERSIST_TIMER ) ;
285
+ let mut last_rebroadcast_call = $get_timer( REBROADCAST_TIMER ) ;
278
286
let mut have_pruned = false ;
279
287
280
288
loop {
@@ -372,6 +380,12 @@ macro_rules! define_run_body {
372
380
}
373
381
last_scorer_persist_call = $get_timer( SCORER_PERSIST_TIMER ) ;
374
382
}
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
+ }
375
389
}
376
390
377
391
// After we exit, ensure we persist the ChannelManager one final time - this avoids
@@ -1189,19 +1203,22 @@ mod tests {
1189
1203
1190
1204
#[ test]
1191
1205
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`.
1194
1209
let nodes = create_nodes ( 1 , "test_timer_tick_called" . to_string ( ) ) ;
1195
1210
let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
1196
1211
let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
1197
1212
let event_handler = |_: _ | { } ;
1198
1213
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 ( ) ) ) ;
1199
1214
loop {
1200
1215
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 ( ) {
1205
1222
break
1206
1223
}
1207
1224
}
0 commit comments