Skip to content

Commit 9f41bd7

Browse files
Pass pending_events into pay_internal
Useful for generating Payment(Path)Failed events in this method
1 parent cb81d27 commit 9f41bd7

File tree

2 files changed

+18
-13
lines changed

2 files changed

+18
-13
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2537,6 +2537,7 @@ where
25372537
.send_payment(payment_hash, payment_secret, payment_id, retry_strategy, route_params,
25382538
&self.router, self.list_usable_channels(), || self.compute_inflight_htlcs(),
25392539
&self.entropy_source, &self.node_signer, best_block_height, &self.logger,
2540+
&self.pending_events,
25402541
|path, payment_params, payment_hash, payment_secret, total_value, cur_height, payment_id, keysend_preimage, session_priv|
25412542
self.send_payment_along_path(path, payment_params, payment_hash, payment_secret, total_value, cur_height, payment_id, keysend_preimage, session_priv))
25422543
}
@@ -2613,7 +2614,7 @@ where
26132614
self.pending_outbound_payments.send_spontaneous_payment(payment_preimage, payment_id,
26142615
retry_strategy, route_params, &self.router, self.list_usable_channels(),
26152616
|| self.compute_inflight_htlcs(), &self.entropy_source, &self.node_signer, best_block_height,
2616-
&self.logger,
2617+
&self.logger, &self.pending_events,
26172618
|path, payment_params, payment_hash, payment_secret, total_value, cur_height, payment_id, keysend_preimage, session_priv|
26182619
self.send_payment_along_path(path, payment_params, payment_hash, payment_secret, total_value, cur_height, payment_id, keysend_preimage, session_priv))
26192620
}

lightning/src/ln/outbound_payment.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,8 @@ impl OutboundPayments {
397397
&self, payment_hash: PaymentHash, payment_secret: &Option<PaymentSecret>, payment_id: PaymentId,
398398
retry_strategy: Retry, route_params: RouteParameters, router: &R,
399399
first_hops: Vec<ChannelDetails>, compute_inflight_htlcs: IH, entropy_source: &ES,
400-
node_signer: &NS, best_block_height: u32, logger: &L, send_payment_along_path: SP,
400+
node_signer: &NS, best_block_height: u32, logger: &L,
401+
pending_events: &Mutex<Vec<events::Event>>, send_payment_along_path: SP,
401402
) -> Result<(), PaymentSendFailure>
402403
where
403404
R::Target: Router,
@@ -410,7 +411,7 @@ impl OutboundPayments {
410411
{
411412
self.pay_internal(payment_id, payment_hash, Some((payment_secret, None, retry_strategy)),
412413
route_params, router, first_hops, &compute_inflight_htlcs, entropy_source, node_signer,
413-
best_block_height, logger, &send_payment_along_path)
414+
best_block_height, logger, pending_events, &send_payment_along_path)
414415
.map_err(|e| { self.remove_outbound_if_all_failed(payment_id, &e); e })
415416
}
416417

@@ -435,7 +436,8 @@ impl OutboundPayments {
435436
&self, payment_preimage: Option<PaymentPreimage>, payment_id: PaymentId,
436437
retry_strategy: Retry, route_params: RouteParameters, router: &R,
437438
first_hops: Vec<ChannelDetails>, inflight_htlcs: IH, entropy_source: &ES,
438-
node_signer: &NS, best_block_height: u32, logger: &L, send_payment_along_path: SP
439+
node_signer: &NS, best_block_height: u32, logger: &L,
440+
pending_events: &Mutex<Vec<events::Event>>, send_payment_along_path: SP
439441
) -> Result<PaymentHash, PaymentSendFailure>
440442
where
441443
R::Target: Router,
@@ -451,7 +453,7 @@ impl OutboundPayments {
451453
let payment_hash = PaymentHash(Sha256::hash(&preimage.0).into_inner());
452454
self.pay_internal(payment_id, payment_hash, Some((&None, Some(preimage), retry_strategy)),
453455
route_params, router, first_hops, &inflight_htlcs, entropy_source, node_signer,
454-
best_block_height, logger, &send_payment_along_path)
456+
best_block_height, logger, pending_events, &send_payment_along_path)
455457
.map(|()| payment_hash)
456458
.map_err(|e| { self.remove_outbound_if_all_failed(payment_id, &e); e })
457459
}
@@ -520,7 +522,7 @@ impl OutboundPayments {
520522
}
521523
core::mem::drop(outbounds);
522524
if let Some((payment_id, payment_hash, route_params)) = retry_id_route_params {
523-
if let Err(e) = self.pay_internal(payment_id, payment_hash, None, route_params, router, first_hops(), &inflight_htlcs, entropy_source, node_signer, best_block_height, logger, &send_payment_along_path) {
525+
if let Err(e) = self.pay_internal(payment_id, payment_hash, None, route_params, router, first_hops(), &inflight_htlcs, entropy_source, node_signer, best_block_height, logger, pending_events, &send_payment_along_path) {
524526
log_info!(logger, "Errored retrying payment: {:?}", e);
525527
// If we error on retry, there is no chance of the payment succeeding and no HTLCs have
526528
// been irrevocably committed to, so we can safely abandon.
@@ -557,7 +559,7 @@ impl OutboundPayments {
557559
initial_send_info: Option<(&Option<PaymentSecret>, Option<PaymentPreimage>, Retry)>,
558560
route_params: RouteParameters, router: &R, first_hops: Vec<ChannelDetails>,
559561
inflight_htlcs: &IH, entropy_source: &ES, node_signer: &NS, best_block_height: u32,
560-
logger: &L, send_payment_along_path: &SP,
562+
logger: &L, pending_events: &Mutex<Vec<events::Event>>, send_payment_along_path: &SP,
561563
) -> Result<(), PaymentSendFailure>
562564
where
563565
R::Target: Router,
@@ -591,7 +593,7 @@ impl OutboundPayments {
591593
};
592594
match res {
593595
Err(PaymentSendFailure::AllFailedResendSafe(_)) => {
594-
let retry_res = self.pay_internal(payment_id, payment_hash, None, route_params, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, logger, send_payment_along_path);
596+
let retry_res = self.pay_internal(payment_id, payment_hash, None, route_params, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, logger, pending_events, send_payment_along_path);
595597
log_info!(logger, "Result retrying payment id {}: {:?}", log_bytes!(payment_id.0), retry_res);
596598
if let Err(PaymentSendFailure::ParameterError(APIError::APIMisuseError { err })) = &retry_res {
597599
if err.starts_with("Retries exhausted ") { return res; }
@@ -602,7 +604,7 @@ impl OutboundPayments {
602604
// Some paths were sent, even if we failed to send the full MPP value our recipient may
603605
// misbehave and claim the funds, at which point we have to consider the payment sent, so
604606
// return `Ok()` here, ignoring any retry errors.
605-
let retry_res = self.pay_internal(payment_id, payment_hash, None, retry, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, logger, send_payment_along_path);
607+
let retry_res = self.pay_internal(payment_id, payment_hash, None, retry, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, logger, pending_events, send_payment_along_path);
606608
log_info!(logger, "Result retrying payment id {}: {:?}", log_bytes!(payment_id.0), retry_res);
607609
Ok(())
608610
},
@@ -1277,16 +1279,17 @@ mod tests {
12771279
final_value_msat: 0,
12781280
final_cltv_expiry_delta: 0,
12791281
};
1282+
let pending_events = Mutex::new(Vec::new());
12801283
let err = if on_retry {
12811284
outbound_payments.pay_internal(
12821285
PaymentId([0; 32]), PaymentHash([0; 32]), None, expired_route_params, &&router, vec![],
1283-
&|| InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, &&logger,
1286+
&|| InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, &&logger, &pending_events,
12841287
&|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
12851288
} else {
12861289
outbound_payments.send_payment(
12871290
PaymentHash([0; 32]), &None, PaymentId([0; 32]), Retry::Attempts(0), expired_route_params,
12881291
&&router, vec![], || InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, &&logger,
1289-
|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
1292+
&pending_events, |_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
12901293
};
12911294
if let PaymentSendFailure::ParameterError(APIError::APIMisuseError { err }) = err {
12921295
assert!(err.contains("Invoice expired"));
@@ -1318,19 +1321,20 @@ mod tests {
13181321
router.expect_find_route(route_params.clone(),
13191322
Err(LightningError { err: String::new(), action: ErrorAction::IgnoreError }));
13201323

1324+
let pending_events = Mutex::new(Vec::new());
13211325
let err = if on_retry {
13221326
outbound_payments.add_new_pending_payment(PaymentHash([0; 32]), None, PaymentId([0; 32]), None,
13231327
&Route { paths: vec![], payment_params: None }, Some(Retry::Attempts(1)),
13241328
Some(route_params.payment_params.clone()), &&keys_manager, 0).unwrap();
13251329
outbound_payments.pay_internal(
13261330
PaymentId([0; 32]), PaymentHash([0; 32]), None, route_params, &&router, vec![],
1327-
&|| InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, &&logger,
1331+
&|| InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, &&logger, &pending_events,
13281332
&|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
13291333
} else {
13301334
outbound_payments.send_payment(
13311335
PaymentHash([0; 32]), &None, PaymentId([0; 32]), Retry::Attempts(0), route_params,
13321336
&&router, vec![], || InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, &&logger,
1333-
|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
1337+
&pending_events, |_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
13341338
};
13351339
if let PaymentSendFailure::ParameterError(APIError::APIMisuseError { err }) = err {
13361340
assert!(err.contains("Failed to find a route"));

0 commit comments

Comments
 (0)