@@ -186,7 +186,7 @@ func NewAccountChecker(service Service,
186
186
r .AmtMsat , r .PaymentRequest ,
187
187
r .PaymentHash , r .FeeLimit ,
188
188
)
189
- }, sendResponseHandler , mid . PassThroughErrorHandler ,
189
+ }, sendResponseHandler , erroredPaymentHandler ( service ) ,
190
190
),
191
191
"/lnrpc.Lightning/SendPaymentSync" : mid .NewFullChecker (
192
192
& lnrpc.SendRequest {},
@@ -197,7 +197,7 @@ func NewAccountChecker(service Service,
197
197
r .AmtMsat , r .PaymentRequest ,
198
198
r .PaymentHash , r .FeeLimit ,
199
199
)
200
- }, sendResponseHandler , mid . PassThroughErrorHandler ,
200
+ }, sendResponseHandler , erroredPaymentHandler ( service ) ,
201
201
),
202
202
// routerrpc.Router/SendPayment is deprecated.
203
203
"/routerrpc.Router/SendPaymentV2" : mid .NewFullChecker (
@@ -237,7 +237,7 @@ func NewAccountChecker(service Service,
237
237
return checkSendResponse (
238
238
ctx , service , r .Status , hash , fullAmt ,
239
239
)
240
- }, mid . PassThroughErrorHandler ,
240
+ }, erroredPaymentHandler ( service ) ,
241
241
),
242
242
"/lnrpc.Lightning/SendToRoute" : mid .NewFullChecker (
243
243
& lnrpc.SendToRouteRequest {},
@@ -248,7 +248,7 @@ func NewAccountChecker(service Service,
248
248
return checkSendToRoute (
249
249
ctx , service , r .PaymentHash , r .Route ,
250
250
)
251
- }, sendResponseHandler , mid . PassThroughErrorHandler ,
251
+ }, sendResponseHandler , erroredPaymentHandler ( service ) ,
252
252
),
253
253
"/lnrpc.Lightning/SendToRouteSync" : mid .NewFullChecker (
254
254
& lnrpc.SendToRouteRequest {},
@@ -259,7 +259,7 @@ func NewAccountChecker(service Service,
259
259
return checkSendToRoute (
260
260
ctx , service , r .PaymentHash , r .Route ,
261
261
)
262
- }, sendResponseHandler , mid . PassThroughErrorHandler ,
262
+ }, sendResponseHandler , erroredPaymentHandler ( service ) ,
263
263
),
264
264
// routerrpc.Router/SendToRoute is deprecated.
265
265
"/routerrpc.Router/SendToRouteV2" : mid .NewFullChecker (
@@ -273,7 +273,7 @@ func NewAccountChecker(service Service,
273
273
)
274
274
},
275
275
sendToRouteHTLCResponseHandler (service ),
276
- mid . PassThroughErrorHandler ,
276
+ erroredPaymentHandler ( service ) ,
277
277
),
278
278
"/lnrpc.Lightning/DecodePayReq" : DecodePayReqPassThrough ,
279
279
"/lnrpc.Lightning/ListPayments" : mid .NewResponseRewriter (
@@ -730,6 +730,36 @@ func checkSendToRoute(ctx context.Context, service Service, paymentHash []byte,
730
730
})
731
731
}
732
732
733
+ // erroredPaymentHandler does some trace logging about the errored payment and
734
+ // clears up any state we may have had for the payment.
735
+ func erroredPaymentHandler (service Service ) mid.ErrorHandler {
736
+ return func (ctx context.Context , respErr error ) (error , error ) {
737
+ log , acct , reqID , err := requestScopedValuesFromCtx (ctx )
738
+ if err != nil {
739
+ return nil , err
740
+ }
741
+
742
+ reqVals , ok := service .GetValues (reqID )
743
+ if ! ok {
744
+ return nil , fmt .Errorf ("no request values found for " +
745
+ "request: %d" , reqID )
746
+ }
747
+
748
+ log .Tracef ("Handling payment request error for payment with " +
749
+ "hash: %s and amount: %d" , reqVals .PaymentHash ,
750
+ reqVals .PaymentAmount )
751
+
752
+ err = service .PaymentErrored (acct .ID , reqVals .PaymentHash )
753
+ if err != nil {
754
+ return nil , err
755
+ }
756
+
757
+ service .DeleteValues (reqID )
758
+
759
+ return nil , nil
760
+ }
761
+ }
762
+
733
763
// sendToRouteHTLCResponseHandler creates a response handler for the
734
764
// SendToRouteV2 endpoint which is a streaming endpoint that may return multiple
735
765
// HTLCAttempt updates.
0 commit comments