Skip to content

Commit dcc009a

Browse files
committed
Refactor EventsProvider to take an EventHandler
1 parent fcc0723 commit dcc009a

File tree

12 files changed

+73
-39
lines changed

12 files changed

+73
-39
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ use lightning::util::errors::APIError;
4646
use lightning::util::events;
4747
use lightning::util::logger::Logger;
4848
use lightning::util::config::UserConfig;
49-
use lightning::util::events::{EventsProvider, MessageSendEventsProvider};
49+
use lightning::util::events::MessageSendEventsProvider;
5050
use lightning::util::ser::{Readable, ReadableArgs, Writeable, Writer};
5151
use lightning::util::test_utils::OnlyReadsKeysInterface;
5252
use lightning::routing::router::{Route, RouteHop};

fuzz/src/full_stack.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ use lightning::ln::msgs::DecodeError;
3939
use lightning::routing::router::get_route;
4040
use lightning::routing::network_graph::NetGraphMsgHandler;
4141
use lightning::util::config::UserConfig;
42-
use lightning::util::events::{EventsProvider,Event};
42+
use lightning::util::events::Event;
4343
use lightning::util::enforcing_trait_impls::EnforcingSigner;
4444
use lightning::util::logger::Logger;
4545
use lightning::util::ser::Readable;

lightning-background-processor/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ mod tests {
173173
use lightning::ln::msgs::ChannelMessageHandler;
174174
use lightning::ln::peer_handler::{PeerManager, MessageHandler, SocketDescriptor};
175175
use lightning::util::config::UserConfig;
176-
use lightning::util::events::{Event, EventsProvider, MessageSendEventsProvider, MessageSendEvent};
176+
use lightning::util::events::{Event, MessageSendEventsProvider, MessageSendEvent};
177177
use lightning::util::logger::Logger;
178178
use lightning::util::ser::Writeable;
179179
use lightning::util::test_utils;

lightning-net-tokio/src/lib.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
//! use tokio::sync::mpsc;
2727
//! use std::net::TcpStream;
2828
//! use bitcoin::secp256k1::key::PublicKey;
29-
//! use lightning::util::events::EventsProvider;
29+
//! use lightning::util::events::{Event, EventHandler, EventsProvider};
3030
//! use std::net::SocketAddr;
3131
//! use std::sync::Arc;
3232
//!
@@ -47,12 +47,12 @@
4747
//! lightning_net_tokio::connect_outbound(peer_manager, sender, their_node_id, addr).await;
4848
//! loop {
4949
//! receiver.recv().await;
50-
//! for _event in channel_manager.get_and_clear_pending_events().drain(..) {
51-
//! // Handle the event!
52-
//! }
53-
//! for _event in chain_monitor.get_and_clear_pending_events().drain(..) {
54-
//! // Handle the event!
55-
//! }
50+
//! channel_manager.process_pending_events(&|event| {
51+
//! // Handle the event!
52+
//! });
53+
//! chain_monitor.process_pending_events(&|event| {
54+
//! // Handle the event!
55+
//! });
5656
//! }
5757
//! }
5858
//!
@@ -62,12 +62,12 @@
6262
//! lightning_net_tokio::setup_inbound(peer_manager, sender, socket);
6363
//! loop {
6464
//! receiver.recv().await;
65-
//! for _event in channel_manager.get_and_clear_pending_events().drain(..) {
66-
//! // Handle the event!
67-
//! }
68-
//! for _event in chain_monitor.get_and_clear_pending_events().drain(..) {
69-
//! // Handle the event!
70-
//! }
65+
//! channel_manager.process_pending_events(&|event| {
66+
//! // Handle the event!
67+
//! });
68+
//! chain_monitor.process_pending_events(&|event| {
69+
//! // Handle the event!
70+
//! });
7171
//! }
7272
//! }
7373
//! ```

lightning/src/chain/chainmonitor.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use chain::transaction::{OutPoint, TransactionData};
3535
use chain::keysinterface::Sign;
3636
use util::logger::Logger;
3737
use util::events;
38-
use util::events::Event;
38+
use util::events::EventHandler;
3939

4040
use std::collections::{HashMap, hash_map};
4141
use std::sync::RwLock;
@@ -139,6 +139,15 @@ where C::Target: chain::Filter,
139139
persister,
140140
}
141141
}
142+
143+
#[cfg(any(test, feature = "fuzztarget", feature = "_test_utils"))]
144+
pub fn get_and_clear_pending_events(&self) -> Vec<events::Event> {
145+
use util::events::EventsProvider;
146+
let events = std::cell::RefCell::new(Vec::new());
147+
let event_handler = |event| events.borrow_mut().push(event);
148+
self.process_pending_events(&event_handler);
149+
events.into_inner()
150+
}
142151
}
143152

144153
impl<ChannelSigner: Sign, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref>
@@ -306,12 +315,14 @@ impl<ChannelSigner: Sign, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> even
306315
L::Target: Logger,
307316
P::Target: channelmonitor::Persist<ChannelSigner>,
308317
{
309-
fn get_and_clear_pending_events(&self) -> Vec<Event> {
318+
fn process_pending_events<H: Deref>(&self, handler: H) where H::Target: EventHandler {
310319
let mut pending_events = Vec::new();
311320
for monitor in self.monitors.read().unwrap().values() {
312321
pending_events.append(&mut monitor.get_and_clear_pending_events());
313322
}
314-
pending_events
323+
for event in pending_events.drain(..) {
324+
handler.handle_event(event);
325+
}
315326
}
316327
}
317328

@@ -320,7 +331,6 @@ mod tests {
320331
use ::{check_added_monitors, get_local_commitment_txn};
321332
use ln::features::InitFeatures;
322333
use ln::functional_test_utils::*;
323-
use util::events::EventsProvider;
324334
use util::events::MessageSendEventsProvider;
325335
use util::test_utils::{OnRegisterOutput, TxOutReference};
326336

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use ln::msgs;
2626
use ln::msgs::{ChannelMessageHandler, ErrorAction, RoutingMessageHandler};
2727
use routing::router::get_route;
2828
use util::enforcing_trait_impls::EnforcingSigner;
29-
use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
29+
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
3030
use util::errors::APIError;
3131
use util::ser::{ReadableArgs, Writeable};
3232

lightning/src/ln/channelmanager.rs

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ use ln::onion_utils;
5454
use ln::msgs::{ChannelMessageHandler, DecodeError, LightningError, OptionalField};
5555
use chain::keysinterface::{Sign, KeysInterface, KeysManager, InMemorySigner};
5656
use util::config::UserConfig;
57-
use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
57+
use util::events::{EventHandler, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
5858
use util::{byte_utils, events};
5959
use util::ser::{Readable, ReadableArgs, MaybeReadable, Writeable, Writer};
6060
use util::chacha20::{ChaCha20, ChaChaReader};
@@ -1685,6 +1685,8 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
16851685
/// Note that this includes RBF or similar transaction replacement strategies - lightning does
16861686
/// not currently support replacing a funding transaction on an existing channel. Instead,
16871687
/// create a new channel with a conflicting funding transaction.
1688+
///
1689+
/// [`Event::FundingGenerationReady`]: crate::util::events::Event::FundingGenerationReady
16881690
pub fn funding_transaction_generated(&self, temporary_channel_id: &[u8; 32], funding_transaction: Transaction) -> Result<(), APIError> {
16891691
let _persistence_guard = PersistenceNotifierGuard::new(&self.total_consistency_lock, &self.persistence_notifier);
16901692

@@ -3501,6 +3503,14 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
35013503
pub fn create_inbound_payment_for_hash(&self, payment_hash: PaymentHash, min_value_msat: Option<u64>, invoice_expiry_delta_secs: u32, user_payment_id: u64) -> Result<PaymentSecret, APIError> {
35023504
self.set_payment_hash_secret_map(payment_hash, None, min_value_msat, invoice_expiry_delta_secs, user_payment_id)
35033505
}
3506+
3507+
#[cfg(any(test, feature = "fuzztarget", feature = "_test_utils"))]
3508+
pub fn get_and_clear_pending_events(&self) -> Vec<events::Event> {
3509+
let events = std::cell::RefCell::new(Vec::new());
3510+
let event_handler = |event| events.borrow_mut().push(event);
3511+
self.process_pending_events(&event_handler);
3512+
events.into_inner()
3513+
}
35043514
}
35053515

35063516
impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> MessageSendEventsProvider for ChannelManager<Signer, M, T, K, F, L>
@@ -3523,21 +3533,23 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> MessageSend
35233533
}
35243534

35253535
impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> EventsProvider for ChannelManager<Signer, M, T, K, F, L>
3526-
where M::Target: chain::Watch<Signer>,
3527-
T::Target: BroadcasterInterface,
3528-
K::Target: KeysInterface<Signer = Signer>,
3529-
F::Target: FeeEstimator,
3530-
L::Target: Logger,
3536+
where
3537+
M::Target: chain::Watch<Signer>,
3538+
T::Target: BroadcasterInterface,
3539+
K::Target: KeysInterface<Signer = Signer>,
3540+
F::Target: FeeEstimator,
3541+
L::Target: Logger,
35313542
{
3532-
fn get_and_clear_pending_events(&self) -> Vec<Event> {
3543+
fn process_pending_events<H: Deref>(&self, handler: H) where H::Target: EventHandler {
3544+
let _persistence_guard = PersistenceNotifierGuard::new(&self.total_consistency_lock, &self.persistence_notifier);
35333545
//TODO: This behavior should be documented. It's non-intuitive that we query
35343546
// ChannelMonitors when clearing other events.
35353547
self.process_pending_monitor_events();
35363548

3537-
let mut ret = Vec::new();
35383549
let mut pending_events = self.pending_events.lock().unwrap();
3539-
mem::swap(&mut ret, &mut *pending_events);
3540-
ret
3550+
for event in pending_events.drain(..) {
3551+
handler.handle_event(event);
3552+
}
35413553
}
35423554
}
35433555

@@ -4777,7 +4789,7 @@ pub mod bench {
47774789
use routing::router::get_route;
47784790
use util::test_utils;
47794791
use util::config::UserConfig;
4780-
use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
4792+
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
47814793

47824794
use bitcoin::hashes::Hash;
47834795
use bitcoin::hashes::sha256::Hash as Sha256;

lightning/src/ln/functional_test_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
2323
use util::enforcing_trait_impls::EnforcingSigner;
2424
use util::test_utils;
2525
use util::test_utils::TestChainMonitor;
26-
use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
26+
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
2727
use util::errors::APIError;
2828
use util::config::UserConfig;
2929
use util::ser::{ReadableArgs, Writeable, Readable};

lightning/src/ln/functional_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use ln::msgs;
2929
use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler,HTLCFailChannelUpdate, ErrorAction};
3030
use util::enforcing_trait_impls::EnforcingSigner;
3131
use util::{byte_utils, test_utils};
32-
use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
32+
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
3333
use util::errors::APIError;
3434
use util::ser::{Writeable, ReadableArgs};
3535
use util::config::UserConfig;

lightning/src/ln/onion_route_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use ln::features::{InitFeatures, InvoiceFeatures};
2020
use ln::msgs;
2121
use ln::msgs::{ChannelMessageHandler, HTLCFailChannelUpdate, OptionalField};
2222
use util::test_utils;
23-
use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
23+
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
2424
use util::ser::{Writeable, Writer};
2525
use util::config::UserConfig;
2626

lightning/src/ln/reorg_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use ln::channelmanager::{ChannelManager, ChannelManagerReadArgs};
1515
use ln::features::InitFeatures;
1616
use ln::msgs::{ChannelMessageHandler, ErrorAction, HTLCFailChannelUpdate};
1717
use util::enforcing_trait_impls::EnforcingSigner;
18-
use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
18+
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
1919
use util::test_utils;
2020
use util::ser::{ReadableArgs, Writeable};
2121

lightning/src/util/events.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use bitcoin::blockdata::script::Script;
2323

2424
use bitcoin::secp256k1::key::PublicKey;
2525

26+
use std::ops::Deref;
2627
use std::time::Duration;
2728

2829
/// An Event which you should probably take some action in response to.
@@ -382,7 +383,18 @@ pub trait MessageSendEventsProvider {
382383

383384
/// A trait indicating an object may generate events
384385
pub trait EventsProvider {
385-
/// Gets the list of pending events which were generated by previous actions, clearing the list
386-
/// in the process.
387-
fn get_and_clear_pending_events(&self) -> Vec<Event>;
386+
/// Processes any generated events with the given event handler.
387+
fn process_pending_events<H: Deref>(&self, handler: H) where H::Target: EventHandler;
388+
}
389+
390+
/// A trait implemented for objects handling events from [`EventsProvider`].
391+
pub trait EventHandler {
392+
/// Handles the given [`Event`].
393+
fn handle_event(&self, event: Event);
394+
}
395+
396+
impl<F> EventHandler for F where F: Fn(Event) {
397+
fn handle_event(&self, event: Event) {
398+
self(event)
399+
}
388400
}

0 commit comments

Comments
 (0)