From ce0de1cb3eb65dee720821d93eaf50678b71a47b Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 31 Mar 2025 00:00:00 +0000 Subject: [PATCH 1/2] Fix removing payment from in-memory store --- src/payment/store.rs | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/payment/store.rs b/src/payment/store.rs index 367f5a5bd..63432c53a 100644 --- a/src/payment/store.rs +++ b/src/payment/store.rs @@ -641,25 +641,29 @@ where } pub(crate) fn remove(&self, id: &PaymentId) -> Result<(), Error> { - let store_key = hex_utils::to_string(&id.0); - self.kv_store - .remove( - PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE, - PAYMENT_INFO_PERSISTENCE_SECONDARY_NAMESPACE, - &store_key, - false, - ) - .map_err(|e| { - log_error!( - self.logger, - "Removing payment data for key {}/{}/{} failed due to: {}", + let removed = self.payments.lock().unwrap().remove(id).is_some(); + if removed { + let store_key = hex_utils::to_string(&id.0); + self.kv_store + .remove( PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE, PAYMENT_INFO_PERSISTENCE_SECONDARY_NAMESPACE, - store_key, - e - ); - Error::PersistenceFailed - }) + &store_key, + false, + ) + .map_err(|e| { + log_error!( + self.logger, + "Removing payment data for key {}/{}/{} failed due to: {}", + PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE, + PAYMENT_INFO_PERSISTENCE_SECONDARY_NAMESPACE, + store_key, + e + ); + Error::PersistenceFailed + })?; + } + Ok(()) } pub(crate) fn get(&self, id: &PaymentId) -> Option { From c32b646f37e30e31593a2ed807261be335c8e076 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 31 Mar 2025 00:00:00 +0000 Subject: [PATCH 2/2] Use `HashMap::values()` method to access only values --- src/payment/store.rs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/payment/store.rs b/src/payment/store.rs index 63432c53a..636f2f0c8 100644 --- a/src/payment/store.rs +++ b/src/payment/store.rs @@ -686,14 +686,7 @@ where pub(crate) fn list_filter bool>( &self, f: F, ) -> Vec { - self.payments - .lock() - .unwrap() - .iter() - .map(|(_, p)| p) - .filter(f) - .cloned() - .collect::>() + self.payments.lock().unwrap().values().filter(f).cloned().collect::>() } fn persist_info(&self, id: &PaymentId, payment: &PaymentDetails) -> Result<(), Error> {