Skip to content

Commit f3d9a56

Browse files
committed
Add reason to PendingOutboundPayment::Abandoned
1 parent 49d2c8e commit f3d9a56

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

lightning/src/ln/outbound_payment.rs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ pub(crate) enum PendingOutboundPayment {
6868
Abandoned {
6969
session_privs: HashSet<[u8; 32]>,
7070
payment_hash: PaymentHash,
71+
/// Will be `None` if the payment was serialized before 0.0.115.
72+
reason: Option<PaymentFailureReason>,
7173
},
7274
}
7375

@@ -145,7 +147,7 @@ impl PendingOutboundPayment {
145147
*self = PendingOutboundPayment::Fulfilled { session_privs, payment_hash, timer_ticks_without_htlcs: 0 };
146148
}
147149

148-
fn mark_abandoned(&mut self) -> Result<(), ()> {
150+
fn mark_abandoned(&mut self, reason: PaymentFailureReason) -> Result<(), ()> {
149151
let mut session_privs = HashSet::new();
150152
let our_payment_hash;
151153
core::mem::swap(&mut session_privs, match self {
@@ -158,7 +160,7 @@ impl PendingOutboundPayment {
158160
session_privs
159161
},
160162
});
161-
*self = PendingOutboundPayment::Abandoned { session_privs, payment_hash: our_payment_hash };
163+
*self = PendingOutboundPayment::Abandoned { session_privs, payment_hash: our_payment_hash, reason: Some(reason) };
162164
Ok(())
163165
}
164166

@@ -546,11 +548,12 @@ impl OutboundPayments {
546548
outbounds.retain(|pmt_id, pmt| {
547549
let mut retain = true;
548550
if !pmt.is_auto_retryable_now() && pmt.remaining_parts() == 0 {
549-
if pmt.mark_abandoned().is_ok() {
551+
let reason = PaymentFailureReason::RetriesExhausted;
552+
if pmt.mark_abandoned(reason).is_ok() {
550553
pending_events.lock().unwrap().push(events::Event::PaymentFailed {
551554
payment_id: *pmt_id,
552555
payment_hash: pmt.payment_hash().expect("PendingOutboundPayments::Retryable always has a payment hash set"),
553-
reason: Some(events::PaymentFailureReason::RetriesExhausted),
556+
reason: Some(reason),
554557
});
555558
retain = false;
556559
}
@@ -663,7 +666,7 @@ impl OutboundPayments {
663666

664667
macro_rules! abandon_with_entry {
665668
($payment: expr, $reason: expr) => {
666-
if $payment.get_mut().mark_abandoned().is_ok() && $payment.get().remaining_parts() == 0 {
669+
if $payment.get_mut().mark_abandoned($reason).is_ok() && $payment.get().remaining_parts() == 0 {
667670
pending_events.lock().unwrap().push(events::Event::PaymentFailed {
668671
payment_id,
669672
payment_hash,
@@ -1169,7 +1172,12 @@ impl OutboundPayments {
11691172
}
11701173

11711174
if payment_is_probe || !is_retryable_now || !payment_retryable {
1172-
let _ = payment.get_mut().mark_abandoned(); // we'll only Err if it's a legacy payment
1175+
let reason = if !payment_retryable {
1176+
PaymentFailureReason::RecipientRejected
1177+
} else {
1178+
PaymentFailureReason::RetriesExhausted
1179+
};
1180+
let _ = payment.get_mut().mark_abandoned(reason); // we'll only Err if it's a legacy payment
11731181
is_retryable_now = false;
11741182
}
11751183
if payment.get().remaining_parts() == 0 {
@@ -1244,7 +1252,7 @@ impl OutboundPayments {
12441252
) {
12451253
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
12461254
if let hash_map::Entry::Occupied(mut payment) = outbounds.entry(payment_id) {
1247-
if let Ok(()) = payment.get_mut().mark_abandoned() {
1255+
if let Ok(()) = payment.get_mut().mark_abandoned(reason) {
12481256
if payment.get().remaining_parts() == 0 {
12491257
pending_events.lock().unwrap().push(events::Event::PaymentFailed {
12501258
payment_id,
@@ -1311,6 +1319,7 @@ impl_writeable_tlv_based_enum_upgradable!(PendingOutboundPayment,
13111319
},
13121320
(3, Abandoned) => {
13131321
(0, session_privs, required),
1322+
(1, reason, option),
13141323
(2, payment_hash, required),
13151324
},
13161325
);

0 commit comments

Comments
 (0)