@@ -378,22 +378,23 @@ impl OutboundPayments {
378
378
}
379
379
}
380
380
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 > (
382
382
& self , payment_hash : PaymentHash , payment_secret : & Option < PaymentSecret > , payment_id : PaymentId ,
383
383
retry_strategy : Retry , route_params : RouteParameters , router : & R ,
384
384
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 ,
386
386
) -> Result < ( ) , PaymentSendFailure >
387
387
where
388
388
R :: Target : Router ,
389
389
ES :: Target : EntropySource ,
390
390
NS :: Target : NodeSigner ,
391
+ L :: Target : Logger ,
391
392
F : Fn ( & Vec < RouteHop > , & Option < PaymentParameters > , & PaymentHash , & Option < PaymentSecret > , u64 ,
392
393
u32 , PaymentId , & Option < PaymentPreimage > , [ u8 ; 32 ] ) -> Result < ( ) , APIError > ,
393
394
{
394
395
self . pay_internal ( payment_id, Some ( ( payment_hash, payment_secret, retry_strategy) ) ,
395
396
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)
397
398
. map_err ( |e| { self . remove_outbound_if_all_failed ( payment_id, & e) ; e } )
398
399
}
399
400
@@ -470,24 +471,25 @@ impl OutboundPayments {
470
471
}
471
472
if let Some ( ( payment_id, route_params) ) = retry_id_route_params {
472
473
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) ;
475
476
}
476
477
} else { break }
477
478
}
478
479
}
479
480
480
- fn pay_internal < R : Deref , NS : Deref , ES : Deref , F > (
481
+ fn pay_internal < R : Deref , NS : Deref , ES : Deref , F , L : Deref > (
481
482
& self , payment_id : PaymentId ,
482
483
initial_send_info : Option < ( PaymentHash , & Option < PaymentSecret > , Retry ) > ,
483
484
route_params : RouteParameters , router : & R , first_hops : Vec < ChannelDetails > ,
484
485
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 ,
486
487
) -> Result < ( ) , PaymentSendFailure >
487
488
where
488
489
R :: Target : Router ,
489
490
ES :: Target : EntropySource ,
490
491
NS :: Target : NodeSigner ,
492
+ L :: Target : Logger ,
491
493
F : Fn ( & Vec < RouteHop > , & Option < PaymentParameters > , & PaymentHash , & Option < PaymentSecret > , u64 ,
492
494
u32 , PaymentId , & Option < PaymentPreimage > , [ u8 ; 32 ] ) -> Result < ( ) , APIError >
493
495
{
@@ -522,7 +524,9 @@ impl OutboundPayments {
522
524
} else { return res }
523
525
} else { return res }
524
526
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
526
530
} ,
527
531
Err ( PaymentSendFailure :: PartialFailure { failed_paths_retry : Some ( retry) , results, .. } ) => {
528
532
let mut outbounds = self . pending_outbound_payments . lock ( ) . unwrap ( ) ;
@@ -537,7 +541,8 @@ impl OutboundPayments {
537
541
// Some paths were sent, even if we failed to send the full MPP value our recipient may
538
542
// misbehave and claim the funds, at which point we have to consider the payment sent, so
539
543
// 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) ;
541
546
Ok ( ( ) )
542
547
} ,
543
548
Err ( PaymentSendFailure :: PartialFailure { failed_paths_retry : None , .. } ) => {
@@ -1164,11 +1169,12 @@ mod tests {
1164
1169
let err = if on_retry {
1165
1170
outbound_payments. pay_internal (
1166
1171
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 ( )
1168
1173
} else {
1169
1174
outbound_payments. send_payment (
1170
1175
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 ( )
1172
1178
} ;
1173
1179
if let PaymentSendFailure :: ParameterError ( APIError :: APIMisuseError { err } ) = err {
1174
1180
assert ! ( err. contains( "Invoice expired" ) ) ;
@@ -1205,11 +1211,12 @@ mod tests {
1205
1211
& & keys_manager, 0 ) . unwrap ( ) ;
1206
1212
outbound_payments. pay_internal (
1207
1213
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 ( )
1209
1215
} else {
1210
1216
outbound_payments. send_payment (
1211
1217
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 ( )
1213
1220
} ;
1214
1221
if let PaymentSendFailure :: ParameterError ( APIError :: APIMisuseError { err } ) = err {
1215
1222
assert ! ( err. contains( "Failed to find a route" ) ) ;
0 commit comments