Skip to content

Commit 0318550

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 e1381d8 commit 0318550

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
@@ -183,7 +183,6 @@ where
183183
let mut message_queue_notifier = self.pending_messages.notifier();
184184

185185
let mut outer_state_lock = self.per_peer_state.write().unwrap();
186-
self.check_prune_stale_webhooks(&mut outer_state_lock);
187186

188187
let peer_state_lock =
189188
outer_state_lock.entry(counterparty_node_id).or_insert_with(PeerState::default);
@@ -264,9 +263,7 @@ where
264263
) -> Result<(), LightningError> {
265264
let mut message_queue_notifier = self.pending_messages.notifier();
266265

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

@@ -286,7 +283,6 @@ where
286283
let mut message_queue_notifier = self.pending_messages.notifier();
287284

288285
let mut outer_state_lock = self.per_peer_state.write().unwrap();
289-
self.check_prune_stale_webhooks(&mut outer_state_lock);
290286

291287
if let Some(peer_state) = outer_state_lock.get_mut(&counterparty_node_id) {
292288
if peer_state.remove_webhook(&params.app_name) {
@@ -411,8 +407,6 @@ where
411407
&self, client_id: PublicKey, notification: WebhookNotification,
412408
) -> Result<(), LSPS5ProtocolError> {
413409
let mut outer_state_lock = self.per_peer_state.write().unwrap();
414-
self.check_prune_stale_webhooks(&mut outer_state_lock);
415-
416410
let peer_state = if let Some(peer_state) = outer_state_lock.get_mut(&client_id) {
417411
peer_state
418412
} else {
@@ -507,13 +501,15 @@ where
507501
if let Some(peer_state) = outer_state_lock.get_mut(counterparty_node_id) {
508502
peer_state.reset_notification_cooldown();
509503
}
504+
self.check_prune_stale_webhooks(&mut outer_state_lock);
510505
}
511506

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

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)