Skip to content

Commit 06d83bf

Browse files
committed
Only prune on peer_{dis}connected
Previously, we'd constantly check whether or not we can prune stale webhooks. While not wrong, it lead to a bunch of ~unnecessary operations, especially given that we only prune once a day currently. Here we move pruning to `peer_connected`/`peer_disconnected`, which is similar to what we do for LSPS2, and should still be more than enough.
1 parent 3c13ba8 commit 06d83bf

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

lightning-liquidity/src/lsps5/service.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,6 @@ where
179179
let mut message_queue_notifier = self.pending_messages.notifier();
180180

181181
let mut outer_state_lock = self.per_peer_state.write().unwrap();
182-
self.check_prune_stale_webhooks(&mut outer_state_lock);
183182

184183
let peer_state =
185184
outer_state_lock.entry(counterparty_node_id).or_insert_with(PeerState::default);
@@ -263,9 +262,7 @@ where
263262
) -> Result<(), LightningError> {
264263
let mut message_queue_notifier = self.pending_messages.notifier();
265264

266-
let mut outer_state_lock = self.per_peer_state.write().unwrap();
267-
self.check_prune_stale_webhooks(&mut outer_state_lock);
268-
265+
let outer_state_lock = self.per_peer_state.read().unwrap();
269266
let app_names =
270267
outer_state_lock.get(&counterparty_node_id).map(|p| p.app_names()).unwrap_or_default();
271268

@@ -285,7 +282,6 @@ where
285282
let mut message_queue_notifier = self.pending_messages.notifier();
286283

287284
let mut outer_state_lock = self.per_peer_state.write().unwrap();
288-
self.check_prune_stale_webhooks(&mut outer_state_lock);
289285

290286
if let Some(peer_state) = outer_state_lock.get_mut(&counterparty_node_id) {
291287
if peer_state.remove_webhook(&params.app_name) {
@@ -410,8 +406,6 @@ where
410406
&self, client_id: PublicKey, notification: WebhookNotification,
411407
) -> Result<(), LSPS5ProtocolError> {
412408
let mut outer_state_lock = self.per_peer_state.write().unwrap();
413-
self.check_prune_stale_webhooks(&mut outer_state_lock);
414-
415409
let peer_state = if let Some(peer_state) = outer_state_lock.get_mut(&client_id) {
416410
peer_state
417411
} else {
@@ -506,13 +500,15 @@ where
506500
if let Some(peer_state) = outer_state_lock.get_mut(counterparty_node_id) {
507501
peer_state.reset_notification_cooldown();
508502
}
503+
self.check_prune_stale_webhooks(&mut outer_state_lock);
509504
}
510505

511506
pub(crate) fn peer_disconnected(&self, counterparty_node_id: &PublicKey) {
512507
let mut outer_state_lock = self.per_peer_state.write().unwrap();
513508
if let Some(peer_state) = outer_state_lock.get_mut(counterparty_node_id) {
514509
peer_state.reset_notification_cooldown();
515510
}
511+
self.check_prune_stale_webhooks(&mut outer_state_lock);
516512
}
517513
}
518514

lightning-liquidity/tests/lsps5_integration_tests.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,15 @@ fn stale_webhooks() {
861861
MIN_WEBHOOK_RETENTION_DAYS.as_secs() + PRUNE_STALE_WEBHOOKS_INTERVAL_DAYS.as_secs(),
862862
);
863863

864-
// LIST calls prune before executing -> should be empty after advancing time
864+
// LIST should be empty after advancing time and reconnection
865+
service_node.liquidity_manager.peer_disconnected(client_node_id);
866+
let init_msg = Init {
867+
features: lightning_types::features::InitFeatures::empty(),
868+
remote_network_address: None,
869+
networks: None,
870+
};
871+
service_node.liquidity_manager.peer_connected(client_node_id, &init_msg, false).unwrap();
872+
865873
let _ = client_handler.list_webhooks(service_node_id);
866874
let list_req2 = get_lsps_message!(client_node, service_node_id);
867875
service_node.liquidity_manager.handle_custom_message(list_req2, client_node_id).unwrap();
@@ -1068,7 +1076,7 @@ fn test_notify_without_webhooks_does_nothing() {
10681076
}
10691077

10701078
#[test]
1071-
fn test_send_notifications_and_peer_connected_resets_cooldown() {
1079+
fn test_notifications_and_peer_connected_resets_cooldown() {
10721080
let mock_time_provider = Arc::new(MockTimeProvider::new(1000));
10731081
let time_provider = Arc::<MockTimeProvider>::clone(&mock_time_provider);
10741082
let chanmon_cfgs = create_chanmon_cfgs(2);

0 commit comments

Comments
 (0)