From 61673b144f6fc45947fd3405d73f0451f6d8dffb Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:03:08 -0700 Subject: [PATCH 01/11] Handle payment_store update failure in PaymentClaimable. --- src/event.rs | 49 +++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/src/event.rs b/src/event.rs index 8d732d21a..e157acadb 100644 --- a/src/event.rs +++ b/src/event.rs @@ -498,11 +498,13 @@ where status: Some(PaymentStatus::Failed), ..PaymentDetailsUpdate::new(payment_id) }; - self.payment_store.update(&update).unwrap_or_else(|e| { - log_error!(self.logger, "Failed to access payment store: {}", e); - panic!("Failed to access payment store"); - }); - return Ok(()); + match self.payment_store.update(&update) { + Ok(_) => return Ok(()), + Err(e) => { + log_error!(self.logger, "Failed to access payment store: {}", e); + return Err(ReplayEvent()) + }, + }; } if info.status == PaymentStatus::Succeeded @@ -520,11 +522,13 @@ where status: Some(PaymentStatus::Failed), ..PaymentDetailsUpdate::new(payment_id) }; - self.payment_store.update(&update).unwrap_or_else(|e| { - log_error!(self.logger, "Failed to access payment store: {}", e); - panic!("Failed to access payment store"); - }); - return Ok(()); + match self.payment_store.update(&update) { + Ok(_) => return Ok(()), + Err(e) => { + log_error!(self.logger, "Failed to access payment store: {}", e); + return Err(ReplayEvent()) + }, + }; } let max_total_opening_fee_msat = match info.kind { @@ -559,11 +563,13 @@ where status: Some(PaymentStatus::Failed), ..PaymentDetailsUpdate::new(payment_id) }; - self.payment_store.update(&update).unwrap_or_else(|e| { - log_error!(self.logger, "Failed to access payment store: {}", e); - panic!("Failed to access payment store"); - }); - return Ok(()); + match self.payment_store.update(&update) { + Ok(_) => return Ok(()), + Err(e) => { + log_error!(self.logger, "Failed to access payment store: {}", e); + return Err(ReplayEvent()) + }, + }; } // If this is known by the store but ChannelManager doesn't know the preimage, @@ -715,10 +721,13 @@ where status: Some(PaymentStatus::Failed), ..PaymentDetailsUpdate::new(payment_id) }; - self.payment_store.update(&update).unwrap_or_else(|e| { - log_error!(self.logger, "Failed to access payment store: {}", e); - panic!("Failed to access payment store"); - }); + match self.payment_store.update(&update) { + Ok(_) => return Ok(()), + Err(e) => { + log_error!(self.logger, "Failed to access payment store: {}", e); + return Err(ReplayEvent()) + }, + }; } }, LdkEvent::PaymentClaimed { @@ -796,7 +805,7 @@ where payment_id, e ); - panic!("Failed to access payment store"); + return Err(ReplayEvent()); }, } From 7e93628f33ed7da4f4e1cab14b5af229c66633d7 Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:08:46 -0700 Subject: [PATCH 02/11] Handle payment_store update failure in PaymentFailed. --- src/event.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/event.rs b/src/event.rs index e157acadb..c43847137 100644 --- a/src/event.rs +++ b/src/event.rs @@ -886,10 +886,13 @@ where status: Some(PaymentStatus::Failed), ..PaymentDetailsUpdate::new(payment_id) }; - self.payment_store.update(&update).unwrap_or_else(|e| { - log_error!(self.logger, "Failed to access payment store: {}", e); - panic!("Failed to access payment store"); - }); + match self.payment_store.update(&update) { + Ok(_) => {}, + Err(e) => { + log_error!(self.logger, "Failed to access payment store: {}", e); + return Err(ReplayEvent()); + }, + }; self.event_queue .add_event(Event::PaymentFailed { payment_id: Some(payment_id), From 07c34ef43c1c68b0eae2e9bcff476caabece70da Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:10:17 -0700 Subject: [PATCH 03/11] Handle payment_store update failure in PaymentSent. --- src/event.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/event.rs b/src/event.rs index c43847137..8506ba240 100644 --- a/src/event.rs +++ b/src/event.rs @@ -841,10 +841,13 @@ where ..PaymentDetailsUpdate::new(payment_id) }; - self.payment_store.update(&update).unwrap_or_else(|e| { - log_error!(self.logger, "Failed to access payment store: {}", e); - panic!("Failed to access payment store"); - }); + match self.payment_store.update(&update) { + Ok(_) => {}, + Err(e) => { + log_error!(self.logger, "Failed to access payment store: {}", e); + return Err(ReplayEvent()); + }, + }; self.payment_store.get(&payment_id).map(|payment| { log_info!( From bf7436540036ccb66561e67522e188ce35197938 Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:20:19 -0700 Subject: [PATCH 04/11] Handle event_queue push failure in PaymentClaimable. --- src/event.rs | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/event.rs b/src/event.rs index 8506ba240..066faa817 100644 --- a/src/event.rs +++ b/src/event.rs @@ -502,7 +502,7 @@ where Ok(_) => return Ok(()), Err(e) => { log_error!(self.logger, "Failed to access payment store: {}", e); - return Err(ReplayEvent()) + return Err(ReplayEvent()); }, }; } @@ -526,7 +526,7 @@ where Ok(_) => return Ok(()), Err(e) => { log_error!(self.logger, "Failed to access payment store: {}", e); - return Err(ReplayEvent()) + return Err(ReplayEvent()); }, }; } @@ -567,7 +567,7 @@ where Ok(_) => return Ok(()), Err(e) => { log_error!(self.logger, "Failed to access payment store: {}", e); - return Err(ReplayEvent()) + return Err(ReplayEvent()); }, }; } @@ -583,22 +583,23 @@ where "We would have registered the preimage if we knew" ); - self.event_queue - .add_event(Event::PaymentClaimable { - payment_id, - payment_hash, - claimable_amount_msat: amount_msat, - claim_deadline, - }) - .unwrap_or_else(|e| { + let event = Event::PaymentClaimable { + payment_id, + payment_hash, + claimable_amount_msat: amount_msat, + claim_deadline, + }; + match self.event_queue.add_event(event) { + Ok(_) => return Ok(()), + Err(e) => { log_error!( self.logger, "Failed to push to event queue: {}", e ); - panic!("Failed to push to event queue"); - }); - return Ok(()); + return Err(ReplayEvent()); + }, + }; } }, _ => {}, @@ -725,7 +726,7 @@ where Ok(_) => return Ok(()), Err(e) => { log_error!(self.logger, "Failed to access payment store: {}", e); - return Err(ReplayEvent()) + return Err(ReplayEvent()); }, }; } From 6eebd00d2bda6177da8c7ffb8653317c29a5d2e2 Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:21:39 -0700 Subject: [PATCH 05/11] Handle event_queue push failure in PaymentClaimed. --- src/event.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/event.rs b/src/event.rs index 066faa817..0accb6b88 100644 --- a/src/event.rs +++ b/src/event.rs @@ -810,16 +810,18 @@ where }, } - self.event_queue - .add_event(Event::PaymentReceived { - payment_id: Some(payment_id), - payment_hash, - amount_msat, - }) - .unwrap_or_else(|e| { + let event = Event::PaymentReceived { + payment_id: Some(payment_id), + payment_hash, + amount_msat, + }; + match self.event_queue.add_event(event) { + Ok(_) => return Ok(()), + Err(e) => { log_error!(self.logger, "Failed to push to event queue: {}", e); - panic!("Failed to push to event queue"); - }); + return Err(ReplayEvent()); + }, + }; }, LdkEvent::PaymentSent { payment_id, From 374dd60e93c07621f113b452bcf323c7e27af957 Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:23:02 -0700 Subject: [PATCH 06/11] Handle event_queue push failure in PaymentSent. --- src/event.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/event.rs b/src/event.rs index 0accb6b88..952018ccc 100644 --- a/src/event.rs +++ b/src/event.rs @@ -867,17 +867,19 @@ where hex_utils::to_string(&payment_preimage.0) ); }); + let event = Event::PaymentSuccessful { + payment_id: Some(payment_id), + payment_hash, + fee_paid_msat, + }; - self.event_queue - .add_event(Event::PaymentSuccessful { - payment_id: Some(payment_id), - payment_hash, - fee_paid_msat, - }) - .unwrap_or_else(|e| { + match self.event_queue.add_event(event) { + Ok(_) => return Ok(()), + Err(e) => { log_error!(self.logger, "Failed to push to event queue: {}", e); - panic!("Failed to push to event queue"); - }); + return Err(ReplayEvent()); + }, + }; }, LdkEvent::PaymentFailed { payment_id, payment_hash, reason, .. } => { log_info!( From 8fa90f021b0e7d837a52b4e30cb81e822cd4e98e Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:24:13 -0700 Subject: [PATCH 07/11] Handle event_queue push failure in PaymentFailed. --- src/event.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/event.rs b/src/event.rs index 952018ccc..388dd90a6 100644 --- a/src/event.rs +++ b/src/event.rs @@ -901,16 +901,16 @@ where return Err(ReplayEvent()); }, }; - self.event_queue - .add_event(Event::PaymentFailed { - payment_id: Some(payment_id), - payment_hash, - reason, - }) - .unwrap_or_else(|e| { + + let event = + Event::PaymentFailed { payment_id: Some(payment_id), payment_hash, reason }; + match self.event_queue.add_event(event) { + Ok(_) => return Ok(()), + Err(e) => { log_error!(self.logger, "Failed to push to event queue: {}", e); - panic!("Failed to push to event queue"); - }); + return Err(ReplayEvent()); + }, + }; }, LdkEvent::PaymentPathSuccessful { .. } => {}, From b7beff0f5affdc846036ea014190c47674170cec Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:26:33 -0700 Subject: [PATCH 08/11] Handle event_queue push failure in ChannelPending. --- src/event.rs | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/event.rs b/src/event.rs index 388dd90a6..cc1a13367 100644 --- a/src/event.rs +++ b/src/event.rs @@ -1131,18 +1131,22 @@ where channel_id, counterparty_node_id, ); - self.event_queue - .add_event(Event::ChannelPending { - channel_id, - user_channel_id: UserChannelId(user_channel_id), - former_temporary_channel_id: former_temporary_channel_id.unwrap(), - counterparty_node_id, - funding_txo, - }) - .unwrap_or_else(|e| { + + let event = Event::ChannelPending { + channel_id, + user_channel_id: UserChannelId(user_channel_id), + former_temporary_channel_id: former_temporary_channel_id.unwrap(), + counterparty_node_id, + funding_txo, + }; + match self.event_queue.add_event(event) { + Ok(_) => {}, + Err(e) => { log_error!(self.logger, "Failed to push to event queue: {}", e); - panic!("Failed to push to event queue"); - }); + return Err(ReplayEvent()); + }, + }; + let network_graph = self.network_graph.read_only(); let channels = self.channel_manager.list_channels_with_counterparty(&counterparty_node_id); From 8e6e9357e6d865188cca618cdcbf91493dc1d538 Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:27:32 -0700 Subject: [PATCH 09/11] Handle event_queue push failure in ChannelReady. --- src/event.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/event.rs b/src/event.rs index cc1a13367..568f44762 100644 --- a/src/event.rs +++ b/src/event.rs @@ -1188,16 +1188,19 @@ where channel_id, counterparty_node_id, ); - self.event_queue - .add_event(Event::ChannelReady { - channel_id, - user_channel_id: UserChannelId(user_channel_id), - counterparty_node_id: Some(counterparty_node_id), - }) - .unwrap_or_else(|e| { + + let event = Event::ChannelReady { + channel_id, + user_channel_id: UserChannelId(user_channel_id), + counterparty_node_id: Some(counterparty_node_id), + }; + match self.event_queue.add_event(event) { + Ok(_) => {}, + Err(e) => { log_error!(self.logger, "Failed to push to event queue: {}", e); - panic!("Failed to push to event queue"); - }); + return Err(ReplayEvent()); + }, + }; }, LdkEvent::ChannelClosed { channel_id, From 7befec75c9b49957c22e77e638316d8b29f4e07d Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:30:07 -0700 Subject: [PATCH 10/11] Handle event_queue push failure in ChannelClosed. --- src/event.rs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/event.rs b/src/event.rs index 568f44762..f84f8466c 100644 --- a/src/event.rs +++ b/src/event.rs @@ -1210,17 +1210,21 @@ where .. } => { log_info!(self.logger, "Channel {} closed due to: {}", channel_id, reason); - self.event_queue - .add_event(Event::ChannelClosed { - channel_id, - user_channel_id: UserChannelId(user_channel_id), - counterparty_node_id, - reason: Some(reason), - }) - .unwrap_or_else(|e| { + + let event = Event::ChannelClosed { + channel_id, + user_channel_id: UserChannelId(user_channel_id), + counterparty_node_id, + reason: Some(reason), + }; + + match self.event_queue.add_event(event) { + Ok(_) => {}, + Err(e) => { log_error!(self.logger, "Failed to push to event queue: {}", e); - panic!("Failed to push to event queue"); - }); + return Err(ReplayEvent()); + }, + }; }, LdkEvent::DiscardFunding { .. } => {}, LdkEvent::HTLCIntercepted { .. } => {}, From 5594560dcd9fe746b9accb749bc2a0e5d312a79a Mon Sep 17 00:00:00 2001 From: G8XSU <3442979+G8XSU@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:36:30 -0700 Subject: [PATCH 11/11] Handle output tracking failure in SpendableOutputs. --- src/event.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/event.rs b/src/event.rs index f84f8466c..3535f6390 100644 --- a/src/event.rs +++ b/src/event.rs @@ -935,12 +935,13 @@ where } }, LdkEvent::SpendableOutputs { outputs, channel_id } => { - self.output_sweeper - .track_spendable_outputs(outputs, channel_id, true, None) - .unwrap_or_else(|_| { + match self.output_sweeper.track_spendable_outputs(outputs, channel_id, true, None) { + Ok(_) => return Ok(()), + Err(_) => { log_error!(self.logger, "Failed to track spendable outputs"); - panic!("Failed to track spendable outputs"); - }); + return Err(ReplayEvent()); + }, + }; }, LdkEvent::OpenChannelRequest { temporary_channel_id,