Skip to content

Commit 453b3a1

Browse files
committed
Call ChainMonitor::rebroadcast_pending_claims on REBROADCAST_TIMER tick
This will prompt monitors to rebroadcast/fee-bump their pending claims on a force-closed channel once on startup and every 30 seconds after.
1 parent db123f7 commit 453b3a1

File tree

1 file changed

+26
-9
lines changed
  • lightning-background-processor/src

1 file changed

+26
-9
lines changed

lightning-background-processor/src/lib.rs

+26-9
Original file line numberDiff line numberDiff line change
@@ -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)]
117117
const 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
121126
const fn min_u64(a: u64, b: u64) -> u64 { if a < b { a } else { b } }
122127
#[cfg(feature = "futures")]
123128
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)));
125130

126131
/// Either [`P2PGossipSync`] or [`RapidGossipSync`].
127132
pub 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

Comments
 (0)