-
Notifications
You must be signed in to change notification settings - Fork 904
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
libplugin-pay: use map for channel hints (on top of #7494) #7648
Closed
JssDWt
wants to merge
23
commits into
ElementsProject:202407-pay-channel-hint-update
from
JssDWt:jssdwt-channel-hint-map-7494
Closed
libplugin-pay: use map for channel hints (on top of #7494) #7648
JssDWt
wants to merge
23
commits into
ElementsProject:202407-pay-channel-hint-update
from
JssDWt:jssdwt-channel-hint-map-7494
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
JssDWt
force-pushed
the
jssdwt-channel-hint-map-7494
branch
from
September 6, 2024 14:02
5857c5e
to
79bc332
Compare
cdecker
force-pushed
the
202407-pay-channel-hint-update
branch
from
September 6, 2024 15:29
c362f12
to
6b068c5
Compare
We relax constraints from the `channel_hint` through a linear refill.
We need to know the overall channel capacity, i.e., the amount_msat that the channel was funded with, in order to relax the channel_hint to refill over time.
We attach the hints to the plugin, so they get shared across multiple payments.
Changelog-None
We're getting serious about how we manage the channel_hints, so let's give them a proper home.
Suggested-by: Rusty Russell <@rustyrussell>
Suggested-by: Rusty Russell <@rustyrussell>
Keeping it in `amount_msat` made the comparisons easier, but it was the wrong type for this.
If we have a large channel, fail to send through a small amount, and then add a `channel_hint`, then it can happen that the call to `channel_hint_set_update` is already late enough that it refills the 1msat we removed from the attempted amount, thus making the edge we just excluded eligible again, which can lead into an infinite loop. We slow down the updating of the channel_hints to once every hysteresis timeout. This allows us to set tight constraints, while not incurring in the accidental relaxation issue.
Making sure that we don't accidentally create an endless loop.
We were using `channel_hint` to temporarily tweak the graph inside of a payment. However, these ad-hoc `channel_hints` are stickier than their predecessors, in that they outlive the payment attempt itself, and interfere with later ones. Changelog-Changed: pay: Discarding an overly long or expensive route does not blocklist channels anymore.
I'm not sure how this ever worked, and it must've been racy: we initiate a number of payments, then proceed to disconnect and reconnect repeatedly. If a payment is attempted inbetween the `disconnect` and `connect` the payment will fail. Removing it since it most likely was just a sledgehammer test that we didn't know how to fine-tune. Changelog-None
It was failing because the channel_hint from one attempt would prevent us from retrying. By changing the amounts so that the channel_hints do not concern them (value smaller than estimate) we can make things work as before again.
We were ignoring more reliable information because of the stricter-is-better logic. This meant that we were also ignoring local channel information, despite knowing better. By simplifying the logic to pick the one with the newer timestamp we ensure that later observations always trump earlier ones. There is a bit of interplay between the relaxation of the constraints updating the timestamp, and comparing to real observation timestamps, but that should not impact us for local channels.
cdecker
force-pushed
the
202407-pay-channel-hint-update
branch
from
September 6, 2024 15:29
6b068c5
to
1e833ba
Compare
This commit fixes a "FIXME: This is slow" in the pay plugin. For nodes with many channels this is a tremendous improvement in pay performance. PR ElementsProject#7611 improves payment performance from 15 seconds to 13.5 seconds on one of our nodes. This commit improves payment performance from 13.5 seconds to 5.7 seconds. Changelog-Fixed: Improved pathfinding speed for large nodes.
JssDWt
force-pushed
the
jssdwt-channel-hint-map-7494
branch
from
September 9, 2024 08:08
79bc332
to
aaff2f3
Compare
endothermicdev
approved these changes
Sep 11, 2024
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.
7 tasks
cdecker
force-pushed
the
202407-pay-channel-hint-update
branch
4 times, most recently
from
October 7, 2024 09:38
05c2d1a
to
d0b2f3c
Compare
4 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
libplugin-pay: use map for channel hints (on top of #7494)
Description
This commit fixes a "FIXME: This is slow" in the pay plugin. For nodes with many channels this is a tremendous improvement in pay performance. PR #7611 improves payment performance from 15 seconds to 13.5 seconds on one of our nodes. This commit improves payment performance from 13.5 seconds to 5.7 seconds.
Changes Made
Checklist
Ensure the following tasks are completed before submitting the PR:
TODOs
have been addressed or removed.Additional Notes
This PR builds on top of #7494
This is a replacement of #7636, because that PR conflicts with #7494