Skip to content

Commit be39d80

Browse files
committed
Process ChainMonitor events in the background
1 parent d7fead9 commit be39d80

File tree

1 file changed

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

1 file changed

+18
-9
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
use lightning::chain;
1212
use lightning::chain::chaininterface::{BroadcasterInterface, FeeEstimator};
13+
use lightning::chain::chainmonitor::ChainMonitor;
14+
use lightning::chain::channelmonitor;
1315
use lightning::chain::keysinterface::{Sign, KeysInterface};
1416
use lightning::ln::channelmanager::ChannelManager;
1517
use lightning::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler};
@@ -102,26 +104,31 @@ impl BackgroundProcessor {
102104
/// [`FilesystemPersister::persist_manager`]: lightning_persister::FilesystemPersister::persist_manager
103105
pub fn start<
104106
Signer: 'static + Sign,
105-
M: 'static + Deref + Send + Sync,
107+
CF: 'static + Deref + Send + Sync,
108+
CW: 'static + Deref + Send + Sync,
106109
T: 'static + Deref + Send + Sync,
107110
K: 'static + Deref + Send + Sync,
108111
F: 'static + Deref + Send + Sync,
109112
L: 'static + Deref + Send + Sync,
113+
P: 'static + Deref + Send + Sync,
110114
Descriptor: 'static + SocketDescriptor + Send + Sync,
111115
CMH: 'static + Deref + Send + Sync,
112116
RMH: 'static + Deref + Send + Sync,
113117
EH: 'static + EventHandler + Send + Sync,
114-
CMP: 'static + Send + ChannelManagerPersister<Signer, M, T, K, F, L>,
115-
CM: 'static + Deref<Target = ChannelManager<Signer, M, T, K, F, L>> + Send + Sync,
118+
CMP: 'static + Send + ChannelManagerPersister<Signer, CW, T, K, F, L>,
119+
M: 'static + Deref<Target = ChainMonitor<Signer, CF, T, F, L, P>> + Send + Sync,
120+
CM: 'static + Deref<Target = ChannelManager<Signer, CW, T, K, F, L>> + Send + Sync,
116121
PM: 'static + Deref<Target = PeerManager<Descriptor, CMH, RMH, L>> + Send + Sync,
117122
>
118-
(persister: CMP, event_handler: EH, channel_manager: CM, peer_manager: PM, logger: L) -> Self
123+
(persister: CMP, event_handler: EH, chain_monitor: M, channel_manager: CM, peer_manager: PM, logger: L) -> Self
119124
where
120-
M::Target: 'static + chain::Watch<Signer>,
125+
CF::Target: 'static + chain::Filter,
126+
CW::Target: 'static + chain::Watch<Signer>,
121127
T::Target: 'static + BroadcasterInterface,
122128
K::Target: 'static + KeysInterface<Signer = Signer>,
123129
F::Target: 'static + FeeEstimator,
124130
L::Target: 'static + Logger,
131+
P::Target: 'static + channelmonitor::Persist<Signer>,
125132
CMH::Target: 'static + ChannelMessageHandler,
126133
RMH::Target: 'static + RoutingMessageHandler,
127134
{
@@ -132,6 +139,7 @@ impl BackgroundProcessor {
132139
loop {
133140
peer_manager.process_events();
134141
channel_manager.process_pending_events(&event_handler);
142+
chain_monitor.process_pending_events(&event_handler);
135143
let updates_available =
136144
channel_manager.await_persistable_update_timeout(Duration::from_millis(100));
137145
if updates_available {
@@ -202,6 +210,7 @@ mod tests {
202210
struct Node {
203211
node: Arc<SimpleArcChannelManager<ChainMonitor, test_utils::TestBroadcaster, test_utils::TestFeeEstimator, test_utils::TestLogger>>,
204212
peer_manager: Arc<PeerManager<TestDescriptor, Arc<test_utils::TestChannelMessageHandler>, Arc<test_utils::TestRoutingMessageHandler>, Arc<test_utils::TestLogger>>>,
213+
chain_monitor: Arc<ChainMonitor>,
205214
persister: Arc<FilesystemPersister>,
206215
logger: Arc<test_utils::TestLogger>,
207216
}
@@ -242,7 +251,7 @@ mod tests {
242251
let manager = Arc::new(ChannelManager::new(fee_estimator.clone(), chain_monitor.clone(), tx_broadcaster, logger.clone(), keys_manager.clone(), UserConfig::default(), params));
243252
let msg_handler = MessageHandler { chan_handler: Arc::new(test_utils::TestChannelMessageHandler::new()), route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new() )};
244253
let peer_manager = Arc::new(PeerManager::new(msg_handler, keys_manager.get_node_secret(), &seed, logger.clone()));
245-
let node = Node { node: manager, peer_manager, persister, logger };
254+
let node = Node { node: manager, peer_manager, chain_monitor, persister, logger };
246255
nodes.push(node);
247256
}
248257
nodes
@@ -286,7 +295,7 @@ mod tests {
286295
let data_dir = nodes[0].persister.get_data_dir();
287296
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);
288297
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());
298+
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
290299

291300
// Go through the channel creation process until each node should have something persisted.
292301
let tx = open_channel!(nodes[0], nodes[1], 100000);
@@ -342,7 +351,7 @@ mod tests {
342351
let data_dir = nodes[0].persister.get_data_dir();
343352
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);
344353
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());
354+
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
346355
loop {
347356
let log_entries = nodes[0].logger.lines.lock().unwrap();
348357
let desired_log = "Calling ChannelManager's and PeerManager's timer_tick_occurred".to_string();
@@ -370,7 +379,7 @@ mod tests {
370379

371380
let nodes = create_nodes(2, "test_persist_error".to_string());
372381
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());
382+
let bg_processor = BackgroundProcessor::start(persist_manager, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
374383
open_channel!(nodes[0], nodes[1], 100000);
375384

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

0 commit comments

Comments
 (0)