-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
multi: fix payment failure overwrite #9543
base: master
Are you sure you want to change the base?
multi: fix payment failure overwrite #9543
Conversation
Important Review skippedAuto reviews are limited to specific labels. 🏷️ Labels to auto review (1)
Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
We now make sure we do not overwrite the payment failure status if it is already set and return an error. When using sendtoroute we might fail a payment twice hence we do not error out if we fail a payment twice.
ab5cd5f
to
4eca3b9
Compare
If the approach is ok, will add a unit-test. lnd/channeldb/payment_control_test.go Lines 891 to 894 in 5fe900d
|
Why did we fail the payment twice? Can we make it fail it once instead? |
We fail it almost certainly twice in Lines 1189 to 1206 in 5fe900d
|
@@ -1200,7 +1200,12 @@ func (r *ChannelRouter) sendToRoute(htlcHash lntypes.Hash, rt *route.Route, | |||
// as failed if we don't skip temp error. | |||
if !skipTempErr { | |||
err := r.cfg.Control.FailPayment(paymentIdentifier, reason) | |||
if err != nil { | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think a better approach is to perform a check on this payment, if it's already failed, we skip calling the above FailPayment
. We don't wanna this single case to change the underlying logic/assumptions for our CRUD.
We are not consistent when handling payment failures so we need to make sure we do not fail a payment twice overwriting its previous failure reason.
Thanks @feelancer21 for reporting. Fixes #9542
Observed in the
sendtoroute
cmd. When tracking the payment it can be observed that we overwrite the payment failure.