Skip to content

Commit 7758838

Browse files
committed
Skip unnecessary persists in process_pending_htlc_forwards
We skip repersisting `ChannelManager` when nothing is actually processed.
1 parent 0236418 commit 7758838

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6341,7 +6341,7 @@ where
63416341

63426342
// Returns whether or not we need to re-persist.
63436343
fn internal_process_pending_htlc_forwards(&self) -> NotifyOption {
6344-
let should_persist = NotifyOption::DoPersist;
6344+
let mut should_persist = NotifyOption::SkipPersistNoEvents;
63456345
self.process_pending_update_add_htlcs();
63466346

63476347
let mut new_events = VecDeque::new();
@@ -6352,6 +6352,7 @@ where
63526352
mem::swap(&mut forward_htlcs, &mut self.forward_htlcs.lock().unwrap());
63536353

63546354
for (short_chan_id, mut pending_forwards) in forward_htlcs {
6355+
should_persist = NotifyOption::DoPersist;
63556356
if short_chan_id != 0 {
63566357
let mut forwarding_counterparty = None;
63576358
macro_rules! forwarding_channel_not_found {
@@ -7112,7 +7113,7 @@ where
71127113
}
71137114

71147115
let best_block_height = self.best_block.read().unwrap().height;
7115-
self.pending_outbound_payments.check_retry_payments(
7116+
let needs_persist = self.pending_outbound_payments.check_retry_payments(
71167117
&self.router,
71177118
|| self.list_usable_channels(),
71187119
|| self.compute_inflight_htlcs(),
@@ -7123,6 +7124,9 @@ where
71237124
&self.logger,
71247125
|args| self.send_payment_along_path(args),
71257126
);
7127+
if needs_persist {
7128+
should_persist = NotifyOption::DoPersist;
7129+
}
71267130

71277131
for (htlc_source, payment_hash, failure_reason, destination) in failed_forwards.drain(..) {
71287132
self.fail_htlc_backwards_internal(
@@ -7138,13 +7142,17 @@ where
71387142
// next get a `get_and_clear_pending_msg_events` call, but some tests rely on it, and it's
71397143
// nice to do the work now if we can rather than while we're trying to get messages in the
71407144
// network stack.
7141-
self.check_free_holding_cells();
7145+
if self.check_free_holding_cells() {
7146+
should_persist = NotifyOption::DoPersist;
7147+
}
71427148

71437149
if new_events.is_empty() {
71447150
return should_persist;
71457151
}
71467152
let mut events = self.pending_events.lock().unwrap();
71477153
events.append(&mut new_events);
7154+
should_persist = NotifyOption::DoPersist;
7155+
71487156
should_persist
71497157
}
71507158

lightning/src/ln/outbound_payment.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,13 +1226,14 @@ impl OutboundPayments {
12261226
)
12271227
}
12281228

1229+
// Returns whether the data changed and needs to be repersisted.
12291230
#[rustfmt::skip]
12301231
pub(super) fn check_retry_payments<R: Deref, ES: Deref, NS: Deref, SP, IH, FH, L: Deref>(
12311232
&self, router: &R, first_hops: FH, inflight_htlcs: IH, entropy_source: &ES, node_signer: &NS,
12321233
best_block_height: u32,
12331234
pending_events: &Mutex<VecDeque<(events::Event, Option<EventCompletionAction>)>>, logger: &L,
12341235
send_payment_along_path: SP,
1235-
)
1236+
) -> bool
12361237
where
12371238
R::Target: Router,
12381239
ES::Target: EntropySource,
@@ -1243,6 +1244,7 @@ impl OutboundPayments {
12431244
L::Target: Logger,
12441245
{
12451246
let _single_thread = self.retry_lock.lock().unwrap();
1247+
let mut should_persist = false;
12461248
loop {
12471249
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
12481250
let mut retry_id_route_params = None;
@@ -1262,7 +1264,8 @@ impl OutboundPayments {
12621264
}
12631265
core::mem::drop(outbounds);
12641266
if let Some((payment_hash, payment_id, route_params)) = retry_id_route_params {
1265-
self.find_route_and_send_payment(payment_hash, payment_id, route_params, router, first_hops(), &inflight_htlcs, entropy_source, node_signer, best_block_height, logger, pending_events, &send_payment_along_path)
1267+
self.find_route_and_send_payment(payment_hash, payment_id, route_params, router, first_hops(), &inflight_htlcs, entropy_source, node_signer, best_block_height, logger, pending_events, &send_payment_along_path);
1268+
should_persist = true;
12661269
} else { break }
12671270
}
12681271

@@ -1278,10 +1281,12 @@ impl OutboundPayments {
12781281
reason: *reason,
12791282
}, None));
12801283
retain = false;
1284+
should_persist = true;
12811285
}
12821286
}
12831287
retain
12841288
});
1289+
should_persist
12851290
}
12861291

12871292
#[rustfmt::skip]

0 commit comments

Comments
 (0)