Skip to content

Commit 09ae81e

Browse files
committed
Log more information when retrying a payment attempt fails
1 parent 04ae834 commit 09ae81e

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2473,7 +2473,7 @@ where
24732473
self.pending_outbound_payments
24742474
.send_payment(payment_hash, payment_secret, payment_id, retry_strategy, route_params,
24752475
&self.router, self.list_usable_channels(), self.compute_inflight_htlcs(),
2476-
&self.entropy_source, &self.node_signer, best_block_height,
2476+
&self.entropy_source, &self.node_signer, best_block_height, &self.logger,
24772477
|path, payment_params, payment_hash, payment_secret, total_value, cur_height, payment_id, keysend_preimage, session_priv|
24782478
self.send_payment_along_path(path, payment_params, payment_hash, payment_secret, total_value, cur_height, payment_id, keysend_preimage, session_priv))
24792479
}

lightning/src/ln/outbound_payment.rs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -378,22 +378,23 @@ impl OutboundPayments {
378378
}
379379
}
380380

381-
pub(super) fn send_payment<R: Deref, ES: Deref, NS: Deref, F>(
381+
pub(super) fn send_payment<R: Deref, ES: Deref, NS: Deref, F, L: Deref>(
382382
&self, payment_hash: PaymentHash, payment_secret: &Option<PaymentSecret>, payment_id: PaymentId,
383383
retry_strategy: Retry, route_params: RouteParameters, router: &R,
384384
first_hops: Vec<ChannelDetails>, inflight_htlcs: InFlightHtlcs, entropy_source: &ES,
385-
node_signer: &NS, best_block_height: u32, send_payment_along_path: F
385+
node_signer: &NS, best_block_height: u32, logger: &L, send_payment_along_path: F,
386386
) -> Result<(), PaymentSendFailure>
387387
where
388388
R::Target: Router,
389389
ES::Target: EntropySource,
390390
NS::Target: NodeSigner,
391+
L::Target: Logger,
391392
F: Fn(&Vec<RouteHop>, &Option<PaymentParameters>, &PaymentHash, &Option<PaymentSecret>, u64,
392393
u32, PaymentId, &Option<PaymentPreimage>, [u8; 32]) -> Result<(), APIError>,
393394
{
394395
self.pay_internal(payment_id, Some((payment_hash, payment_secret, retry_strategy)),
395396
route_params, router, first_hops, inflight_htlcs, entropy_source, node_signer,
396-
best_block_height, &send_payment_along_path)
397+
best_block_height, logger, &send_payment_along_path)
397398
.map_err(|e| { self.remove_outbound_if_all_failed(payment_id, &e); e })
398399
}
399400

@@ -470,24 +471,25 @@ impl OutboundPayments {
470471
}
471472
if let Some((payment_id, route_params)) = retry_id_route_params {
472473
core::mem::drop(outbounds);
473-
if let Err(e) = self.pay_internal(payment_id, None, route_params, router, first_hops(), inflight_htlcs(), entropy_source, node_signer, best_block_height, &send_payment_along_path) {
474-
log_trace!(logger, "Errored retrying payment: {:?}", e);
474+
if let Err(e) = self.pay_internal(payment_id, None, route_params, router, first_hops(), inflight_htlcs(), entropy_source, node_signer, best_block_height, logger, &send_payment_along_path) {
475+
log_info!(logger, "Errored retrying payment: {:?}", e);
475476
}
476477
} else { break }
477478
}
478479
}
479480

480-
fn pay_internal<R: Deref, NS: Deref, ES: Deref, F>(
481+
fn pay_internal<R: Deref, NS: Deref, ES: Deref, F, L: Deref>(
481482
&self, payment_id: PaymentId,
482483
initial_send_info: Option<(PaymentHash, &Option<PaymentSecret>, Retry)>,
483484
route_params: RouteParameters, router: &R, first_hops: Vec<ChannelDetails>,
484485
inflight_htlcs: InFlightHtlcs, entropy_source: &ES, node_signer: &NS, best_block_height: u32,
485-
send_payment_along_path: &F
486+
logger: &L, send_payment_along_path: &F,
486487
) -> Result<(), PaymentSendFailure>
487488
where
488489
R::Target: Router,
489490
ES::Target: EntropySource,
490491
NS::Target: NodeSigner,
492+
L::Target: Logger,
491493
F: Fn(&Vec<RouteHop>, &Option<PaymentParameters>, &PaymentHash, &Option<PaymentSecret>, u64,
492494
u32, PaymentId, &Option<PaymentPreimage>, [u8; 32]) -> Result<(), APIError>
493495
{
@@ -522,7 +524,9 @@ impl OutboundPayments {
522524
} else { return res }
523525
} else { return res }
524526
core::mem::drop(outbounds);
525-
self.pay_internal(payment_id, None, route_params, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, send_payment_along_path)
527+
let retry_res = self.pay_internal(payment_id, None, route_params, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, logger, send_payment_along_path);
528+
log_info!(logger, "Errored retrying payment: {:?}", retry_res);
529+
retry_res
526530
},
527531
Err(PaymentSendFailure::PartialFailure { failed_paths_retry: Some(retry), results, .. }) => {
528532
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
@@ -537,7 +541,8 @@ impl OutboundPayments {
537541
// Some paths were sent, even if we failed to send the full MPP value our recipient may
538542
// misbehave and claim the funds, at which point we have to consider the payment sent, so
539543
// return `Ok()` here, ignoring any retry errors.
540-
let _ = self.pay_internal(payment_id, None, retry, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, send_payment_along_path);
544+
let retry_res = self.pay_internal(payment_id, None, retry, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, logger, send_payment_along_path);
545+
log_info!(logger, "Errored retrying payment: {:?}", retry_res);
541546
Ok(())
542547
},
543548
Err(PaymentSendFailure::PartialFailure { failed_paths_retry: None, .. }) => {
@@ -1164,11 +1169,12 @@ mod tests {
11641169
let err = if on_retry {
11651170
outbound_payments.pay_internal(
11661171
PaymentId([0; 32]), None, expired_route_params, &&router, vec![], InFlightHtlcs::new(),
1167-
&&keys_manager, &&keys_manager, 0, &|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
1172+
&&keys_manager, &&keys_manager, 0, &&logger, &|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
11681173
} else {
11691174
outbound_payments.send_payment(
11701175
PaymentHash([0; 32]), &None, PaymentId([0; 32]), Retry::Attempts(0), expired_route_params,
1171-
&&router, vec![], InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, |_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
1176+
&&router, vec![], InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, &&logger,
1177+
|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
11721178
};
11731179
if let PaymentSendFailure::ParameterError(APIError::APIMisuseError { err }) = err {
11741180
assert!(err.contains("Invoice expired"));
@@ -1205,11 +1211,12 @@ mod tests {
12051211
&&keys_manager, 0).unwrap();
12061212
outbound_payments.pay_internal(
12071213
PaymentId([0; 32]), None, route_params, &&router, vec![], InFlightHtlcs::new(),
1208-
&&keys_manager, &&keys_manager, 0, &|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
1214+
&&keys_manager, &&keys_manager, 0, &&logger, &|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
12091215
} else {
12101216
outbound_payments.send_payment(
12111217
PaymentHash([0; 32]), &None, PaymentId([0; 32]), Retry::Attempts(0), route_params,
1212-
&&router, vec![], InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, |_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
1218+
&&router, vec![], InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, &&logger,
1219+
|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
12131220
};
12141221
if let PaymentSendFailure::ParameterError(APIError::APIMisuseError { err }) = err {
12151222
assert!(err.contains("Failed to find a route"));

0 commit comments

Comments
 (0)