Skip to content

Commit 359bd67

Browse files
committed
Process ChannelManager events in the background
1 parent dd3fb93 commit 359bd67

File tree

1 file changed

+13
-7
lines changed
  • lightning-background-processor/src

1 file changed

+13
-7
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use lightning::chain::keysinterface::{Sign, KeysInterface};
1414
use lightning::ln::channelmanager::ChannelManager;
1515
use lightning::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler};
1616
use lightning::ln::peer_handler::{PeerManager, SocketDescriptor};
17+
use lightning::util::events::{EventHandler, EventsProvider};
1718
use lightning::util::logger::Logger;
1819
use std::sync::Arc;
1920
use std::sync::atomic::{AtomicBool, Ordering};
@@ -109,11 +110,12 @@ impl BackgroundProcessor {
109110
Descriptor: 'static + SocketDescriptor + Send + Sync,
110111
CMH: 'static + Deref + Send + Sync,
111112
RMH: 'static + Deref + Send + Sync,
113+
EH: 'static + EventHandler + Send + Sync,
112114
CMP: 'static + Send + ChannelManagerPersister<Signer, M, T, K, F, L>,
113115
CM: 'static + Deref<Target = ChannelManager<Signer, M, T, K, F, L>> + Send + Sync,
114116
PM: 'static + Deref<Target = PeerManager<Descriptor, CMH, RMH, L>> + Send + Sync,
115117
>
116-
(handler: CMP, channel_manager: CM, peer_manager: PM, logger: L) -> Self
118+
(persister: CMP, event_handler: EH, channel_manager: CM, peer_manager: PM, logger: L) -> Self
117119
where
118120
M::Target: 'static + chain::Watch<Signer>,
119121
T::Target: 'static + BroadcasterInterface,
@@ -129,10 +131,11 @@ impl BackgroundProcessor {
129131
let mut current_time = Instant::now();
130132
loop {
131133
peer_manager.process_events();
134+
channel_manager.process_pending_events(&event_handler);
132135
let updates_available =
133136
channel_manager.await_persistable_update_timeout(Duration::from_millis(100));
134137
if updates_available {
135-
handler.persist_manager(&*channel_manager)?;
138+
persister.persist_manager(&*channel_manager)?;
136139
}
137140
// Exit the loop if the background processor was requested to stop.
138141
if stop_thread.load(Ordering::Acquire) == true {
@@ -281,8 +284,9 @@ mod tests {
281284

282285
// Initiate the background processors to watch each node.
283286
let data_dir = nodes[0].persister.get_data_dir();
284-
let callback = move |node: &ChannelManager<InMemorySigner, Arc<ChainMonitor>, Arc<test_utils::TestBroadcaster>, Arc<KeysManager>, Arc<test_utils::TestFeeEstimator>, Arc<test_utils::TestLogger>>| FilesystemPersister::persist_manager(data_dir.clone(), node);
285-
let bg_processor = BackgroundProcessor::start(callback, nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
287+
let persister = move |node: &ChannelManager<InMemorySigner, Arc<ChainMonitor>, Arc<test_utils::TestBroadcaster>, Arc<KeysManager>, Arc<test_utils::TestFeeEstimator>, Arc<test_utils::TestLogger>>| FilesystemPersister::persist_manager(data_dir.clone(), node);
288+
let event_handler = |_| {};
289+
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
286290

287291
// Go through the channel creation process until each node should have something persisted.
288292
let tx = open_channel!(nodes[0], nodes[1], 100000);
@@ -336,8 +340,9 @@ mod tests {
336340
// `FRESHNESS_TIMER`.
337341
let nodes = create_nodes(1, "test_timer_tick_called".to_string());
338342
let data_dir = nodes[0].persister.get_data_dir();
339-
let callback = move |node: &ChannelManager<InMemorySigner, Arc<ChainMonitor>, Arc<test_utils::TestBroadcaster>, Arc<KeysManager>, Arc<test_utils::TestFeeEstimator>, Arc<test_utils::TestLogger>>| FilesystemPersister::persist_manager(data_dir.clone(), node);
340-
let bg_processor = BackgroundProcessor::start(callback, nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
343+
let persister = move |node: &ChannelManager<InMemorySigner, Arc<ChainMonitor>, Arc<test_utils::TestBroadcaster>, Arc<KeysManager>, Arc<test_utils::TestFeeEstimator>, Arc<test_utils::TestLogger>>| FilesystemPersister::persist_manager(data_dir.clone(), node);
344+
let event_handler = |_| {};
345+
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
341346
loop {
342347
let log_entries = nodes[0].logger.lines.lock().unwrap();
343348
let desired_log = "Calling ChannelManager's and PeerManager's timer_tick_occurred".to_string();
@@ -364,7 +369,8 @@ mod tests {
364369
}
365370

366371
let nodes = create_nodes(2, "test_persist_error".to_string());
367-
let bg_processor = BackgroundProcessor::start(persist_manager, nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
372+
let event_handler = |_| {};
373+
let bg_processor = BackgroundProcessor::start(persist_manager, event_handler, nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
368374
open_channel!(nodes[0], nodes[1], 100000);
369375

370376
let _ = bg_processor.thread_handle.join().unwrap().expect_err("Errored persisting manager: test");

0 commit comments

Comments
 (0)