Skip to content

Commit e2b964e

Browse files
committed
Log before and after Event processing calls
At various points we've had issues where `Event` processing for a user possibly is taking a long time, causing other things to stall. However, due to lack of logging during `Event` processing itself this can be rather difficult to debug. In 85eb814 we attempted to add logging for this, but in doing so ended up with more verbose logging than we were comfortable with. Instead, here, we log only when we actually process an `Event`, directly in the callsite passing the `Event` to the user. Fixes #3331
1 parent 10f9123 commit e2b964e

File tree

4 files changed

+40
-15
lines changed

4 files changed

+40
-15
lines changed

lightning/src/chain/chainmonitor.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ where C::Target: chain::Filter,
573573
for funding_txo in mons_to_process {
574574
let mut ev;
575575
match super::channelmonitor::process_events_body!(
576-
self.monitors.read().unwrap().get(&funding_txo).map(|m| &m.monitor), ev, handler(ev).await) {
576+
self.monitors.read().unwrap().get(&funding_txo).map(|m| &m.monitor), self.logger, ev, handler(ev).await) {
577577
Ok(()) => {},
578578
Err(ReplayEvent ()) => {
579579
self.event_notifier.notify();
@@ -909,7 +909,7 @@ impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref,
909909
/// [`BumpTransaction`]: events::Event::BumpTransaction
910910
fn process_pending_events<H: Deref>(&self, handler: H) where H::Target: EventHandler {
911911
for monitor_state in self.monitors.read().unwrap().values() {
912-
match monitor_state.monitor.process_pending_events(&handler) {
912+
match monitor_state.monitor.process_pending_events(&handler, &self.logger) {
913913
Ok(()) => {},
914914
Err(ReplayEvent ()) => {
915915
self.event_notifier.notify();

lightning/src/chain/channelmonitor.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,7 +1236,7 @@ impl<Signer: EcdsaChannelSigner> Writeable for ChannelMonitorImpl<Signer> {
12361236
}
12371237

12381238
macro_rules! _process_events_body {
1239-
($self_opt: expr, $event_to_handle: expr, $handle_event: expr) => {
1239+
($self_opt: expr, $logger: expr, $event_to_handle: expr, $handle_event: expr) => {
12401240
loop {
12411241
let mut handling_res = Ok(());
12421242
let (pending_events, repeated_events);
@@ -1253,8 +1253,11 @@ macro_rules! _process_events_body {
12531253

12541254
let mut num_handled_events = 0;
12551255
for event in pending_events {
1256+
log_trace!($logger, "Handling event {:?}...", event);
12561257
$event_to_handle = event;
1257-
match $handle_event {
1258+
let event_handling_result = $handle_event;
1259+
log_trace!($logger, "Done handling event, result: {:?}", event_handling_result);
1260+
match event_handling_result {
12581261
Ok(()) => num_handled_events += 1,
12591262
Err(e) => {
12601263
// If we encounter an error we stop handling events and make sure to replay
@@ -1614,19 +1617,23 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitor<Signer> {
16141617
///
16151618
/// [`SpendableOutputs`]: crate::events::Event::SpendableOutputs
16161619
/// [`BumpTransaction`]: crate::events::Event::BumpTransaction
1617-
pub fn process_pending_events<H: Deref>(&self, handler: &H) -> Result<(), ReplayEvent> where H::Target: EventHandler {
1620+
pub fn process_pending_events<H: Deref, L: Deref>(&self, handler: &H, logger: &L)
1621+
-> Result<(), ReplayEvent> where H::Target: EventHandler, L::Target: Logger {
16181622
let mut ev;
1619-
process_events_body!(Some(self), ev, handler.handle_event(ev))
1623+
process_events_body!(Some(self), logger, ev, handler.handle_event(ev))
16201624
}
16211625

16221626
/// Processes any events asynchronously.
16231627
///
16241628
/// See [`Self::process_pending_events`] for more information.
1625-
pub async fn process_pending_events_async<Future: core::future::Future<Output = Result<(), ReplayEvent>>, H: Fn(Event) -> Future>(
1626-
&self, handler: &H
1627-
) -> Result<(), ReplayEvent> {
1629+
pub async fn process_pending_events_async<
1630+
Future: core::future::Future<Output = Result<(), ReplayEvent>>, H: Fn(Event) -> Future,
1631+
L: Deref,
1632+
>(
1633+
&self, handler: &H, logger: &L,
1634+
) -> Result<(), ReplayEvent> where L::Target: Logger {
16281635
let mut ev;
1629-
process_events_body!(Some(self), ev, { handler(ev).await })
1636+
process_events_body!(Some(self), logger, ev, { handler(ev).await })
16301637
}
16311638

16321639
#[cfg(test)]

lightning/src/ln/channelmanager.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3321,8 +3321,11 @@ macro_rules! process_events_body {
33213321

33223322
let mut num_handled_events = 0;
33233323
for (event, action_opt) in pending_events {
3324+
log_trace!($self.logger, "Handling event {:?}...", event);
33243325
$event_to_handle = event;
3325-
match $handle_event {
3326+
let event_handling_result = $handle_event;
3327+
log_trace!($self.logger, "Done handling event, result: {:?}", event_handling_result);
3328+
match event_handling_result {
33263329
Ok(()) => {
33273330
if let Some(action) = action_opt {
33283331
post_event_actions.push(action);

lightning/src/onion_message/messenger.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1427,7 +1427,9 @@ where
14271427
for (node_id, recipient) in self.message_recipients.lock().unwrap().iter_mut() {
14281428
if let OnionMessageRecipient::PendingConnection(_, addresses, _) = recipient {
14291429
if let Some(addresses) = addresses.take() {
1430-
let future = ResultFuture::Pending(handler(Event::ConnectionNeeded { node_id: *node_id, addresses }));
1430+
let event = Event::ConnectionNeeded { node_id: *node_id, addresses };
1431+
log_trace!(self.logger, "Handling event {:?} async...", event);
1432+
let future = ResultFuture::Pending(handler(event));
14311433
futures.push(future);
14321434
}
14331435
}
@@ -1439,11 +1441,13 @@ where
14391441

14401442
for ev in intercepted_msgs {
14411443
if let Event::OnionMessageIntercepted { .. } = ev {} else { debug_assert!(false); }
1444+
log_trace!(self.logger, "Handling event {:?} async...", ev);
14421445
let future = ResultFuture::Pending(handler(ev));
14431446
futures.push(future);
14441447
}
14451448
// Let the `OnionMessageIntercepted` events finish before moving on to peer_connecteds
14461449
let res = MultiResultFuturePoller::new(futures).await;
1450+
log_trace!(self.logger, "Done handling events async, results: {:?}", res);
14471451
let mut res_iter = res.iter().skip(intercepted_msgs_offset);
14481452
drop_handled_events_and_abort!(self, res_iter, self.pending_intercepted_msgs_events);
14491453
}
@@ -1464,10 +1468,12 @@ where
14641468
} else {
14651469
let mut futures = Vec::new();
14661470
for event in peer_connecteds {
1471+
log_trace!(self.logger, "Handling event {:?} async...", event);
14671472
let future = ResultFuture::Pending(handler(event));
14681473
futures.push(future);
14691474
}
14701475
let res = MultiResultFuturePoller::new(futures).await;
1476+
log_trace!(self.logger, "Done handling events async, results: {:?}", res);
14711477
let mut res_iter = res.iter();
14721478
drop_handled_events_and_abort!(self, res_iter, self.pending_peer_connected_events);
14731479
}
@@ -1520,7 +1526,10 @@ where
15201526
for (node_id, recipient) in self.message_recipients.lock().unwrap().iter_mut() {
15211527
if let OnionMessageRecipient::PendingConnection(_, addresses, _) = recipient {
15221528
if let Some(addresses) = addresses.take() {
1523-
let _ = handler.handle_event(Event::ConnectionNeeded { node_id: *node_id, addresses });
1529+
let event = Event::ConnectionNeeded { node_id: *node_id, addresses };
1530+
log_trace!(self.logger, "Handling event {:?}...", event);
1531+
let res = handler.handle_event(event);
1532+
log_trace!(self.logger, "Done handling event, ignoring result: {:?}", res);
15241533
}
15251534
}
15261535
}
@@ -1544,7 +1553,10 @@ where
15441553
let mut handling_intercepted_msgs_failed = false;
15451554
let mut num_handled_intercepted_events = 0;
15461555
for ev in intercepted_msgs {
1547-
match handler.handle_event(ev) {
1556+
log_trace!(self.logger, "Handling event {:?}...", ev);
1557+
let res = handler.handle_event(ev);
1558+
log_trace!(self.logger, "Done handling event, result: {:?}", res);
1559+
match res {
15481560
Ok(()) => num_handled_intercepted_events += 1,
15491561
Err(ReplayEvent ()) => {
15501562
handling_intercepted_msgs_failed = true;
@@ -1566,7 +1578,10 @@ where
15661578

15671579
let mut num_handled_peer_connecteds = 0;
15681580
for ev in peer_connecteds {
1569-
match handler.handle_event(ev) {
1581+
log_trace!(self.logger, "Handling event {:?}...", ev);
1582+
let res = handler.handle_event(ev);
1583+
log_trace!(self.logger, "Done handling event, result: {:?}", res);
1584+
match res {
15701585
Ok(()) => num_handled_peer_connecteds += 1,
15711586
Err(ReplayEvent ()) => {
15721587
self.event_notifier.notify();

0 commit comments

Comments
 (0)