@@ -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