@@ -64,8 +64,9 @@ 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`], [`ChainMonitor::rebroadcast_pending_claims`]
68
- /// and [`PeerManager::timer_tick_occurred`] at the appropriate intervals.
67
+ /// * Calling [`ChannelManager::timer_tick_occurred`], [`ChannelManager::retry_tick_occurred`]
68
+ /// [`ChainMonitor::rebroadcast_pending_claims`] and [`PeerManager::timer_tick_occurred`]
69
+ /// at the appropriate intervals.
69
70
/// * Calling [`NetworkGraph::remove_stale_channels_and_tracking`] (if a [`GossipSync`] with a
70
71
/// [`NetworkGraph`] is provided to [`BackgroundProcessor::start`]).
71
72
///
@@ -81,6 +82,7 @@ use alloc::vec::Vec;
81
82
///
82
83
/// [`ChannelManager`]: lightning::ln::channelmanager::ChannelManager
83
84
/// [`ChannelManager::timer_tick_occurred`]: lightning::ln::channelmanager::ChannelManager::timer_tick_occurred
85
+ /// [`ChannelManager::retry_tick_occurred`]: lightning::ln::channelmanager::ChannelManager::retry_tick_occurred
84
86
/// [`ChannelMonitor`]: lightning::chain::channelmonitor::ChannelMonitor
85
87
/// [`Event`]: lightning::events::Event
86
88
/// [`PeerManager::timer_tick_occurred`]: lightning::ln::peer_handler::PeerManager::timer_tick_occurred
@@ -97,6 +99,11 @@ const FRESHNESS_TIMER: u64 = 60;
97
99
#[ cfg( test) ]
98
100
const FRESHNESS_TIMER : u64 = 1 ;
99
101
102
+ #[ cfg( not( test) ) ]
103
+ const RETRY_TIMER : u64 = 5 ;
104
+ #[ cfg( test) ]
105
+ const RETRY_TIMER : u64 = 1 ;
106
+
100
107
#[ cfg( all( not( test) , not( debug_assertions) ) ) ]
101
108
const PING_TIMER : u64 = 10 ;
102
109
/// Signature operations take a lot longer without compiler optimisations.
@@ -134,7 +141,7 @@ const REBROADCAST_TIMER: u64 = 1;
134
141
/// core::cmp::min is not currently const, so we define a trivial (and equivalent) replacement
135
142
const fn min_u64 ( a : u64 , b : u64 ) -> u64 { if a < b { a } else { b } }
136
143
#[ cfg( feature = "futures" ) ]
137
- const FASTEST_TIMER : u64 = min_u64 ( min_u64 ( FRESHNESS_TIMER , PING_TIMER ) ,
144
+ const FASTEST_TIMER : u64 = min_u64 ( min_u64 ( RETRY_TIMER , min_u64 ( FRESHNESS_TIMER , PING_TIMER ) ) ,
138
145
min_u64 ( SCORER_PERSIST_TIMER , min_u64 ( FIRST_NETWORK_PRUNE_TIMER , REBROADCAST_TIMER ) ) ) ;
139
146
140
147
/// Either [`P2PGossipSync`] or [`RapidGossipSync`].
@@ -291,6 +298,7 @@ macro_rules! define_run_body {
291
298
$chain_monitor. rebroadcast_pending_claims( ) ;
292
299
293
300
let mut last_freshness_call = $get_timer( FRESHNESS_TIMER ) ;
301
+ let mut last_retry_call = $get_timer( RETRY_TIMER ) ;
294
302
let mut last_onion_message_handler_call = $get_timer( ONION_MESSAGE_HANDLER_TIMER ) ;
295
303
let mut last_ping_call = $get_timer( PING_TIMER ) ;
296
304
let mut last_prune_call = $get_timer( FIRST_NETWORK_PRUNE_TIMER ) ;
@@ -346,6 +354,11 @@ macro_rules! define_run_body {
346
354
$channel_manager. get_cm( ) . timer_tick_occurred( ) ;
347
355
last_freshness_call = $get_timer( FRESHNESS_TIMER ) ;
348
356
}
357
+ if $timer_elapsed( & mut last_retry_call, RETRY_TIMER ) {
358
+ log_trace!( $logger, "Calling ChannelManager's retry_tick_occurred" ) ;
359
+ $channel_manager. get_cm( ) . retry_tick_occurred( ) ;
360
+ last_retry_call = $get_timer( RETRY_TIMER ) ;
361
+ }
349
362
if $timer_elapsed( & mut last_onion_message_handler_call, ONION_MESSAGE_HANDLER_TIMER ) {
350
363
log_trace!( $logger, "Calling OnionMessageHandler's timer_tick_occurred" ) ;
351
364
$peer_manager. onion_message_handler( ) . timer_tick_occurred( ) ;
@@ -1488,6 +1501,7 @@ mod tests {
1488
1501
// - `ChainMonitor::rebroadcast_pending_claims` is called every `REBROADCAST_TIMER`,
1489
1502
// - `PeerManager::timer_tick_occurred` is called every `PING_TIMER`, and
1490
1503
// - `OnionMessageHandler::timer_tick_occurred` is called every `ONION_MESSAGE_HANDLER_TIMER`.
1504
+ // - `ChannelManager::retry_tick_occurred` is called every `RETRY_TIMER`.
1491
1505
let ( _, nodes) = create_nodes ( 1 , "test_timer_tick_called" ) ;
1492
1506
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1493
1507
let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
@@ -1499,10 +1513,12 @@ mod tests {
1499
1513
let desired_log_2 = "Calling PeerManager's timer_tick_occurred" . to_string ( ) ;
1500
1514
let desired_log_3 = "Rebroadcasting monitor's pending claims" . to_string ( ) ;
1501
1515
let desired_log_4 = "Calling OnionMessageHandler's timer_tick_occurred" . to_string ( ) ;
1516
+ let desired_log_5 = "Calling ChannelManager's retry_tick_occurred" . to_string ( ) ;
1502
1517
if log_entries. get ( & ( "lightning_background_processor" , desired_log_1) ) . is_some ( ) &&
1503
1518
log_entries. get ( & ( "lightning_background_processor" , desired_log_2) ) . is_some ( ) &&
1504
1519
log_entries. get ( & ( "lightning_background_processor" , desired_log_3) ) . is_some ( ) &&
1505
- log_entries. get ( & ( "lightning_background_processor" , desired_log_4) ) . is_some ( ) {
1520
+ log_entries. get ( & ( "lightning_background_processor" , desired_log_4) ) . is_some ( ) &&
1521
+ log_entries. get ( & ( "lightning_background_processor" , desired_log_5) ) . is_some ( ) {
1506
1522
break
1507
1523
}
1508
1524
}
0 commit comments