Various router fixes and #2417 follow-ups - #2575

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic
Sep 28, 2023
Merged

Various router fixes and #2417 follow-ups#2575
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic

Conversation

@tnull

@tnulltnull commented Sep 14, 2023

Copy link
Copy Markdown
Contributor

Based on #2570.

When overpaying to meet htlc_minimum_msat, we update the path value and recompute fees accordingly. However, so far we didn't account for the extra paid fees in value_contribution_msat, which leads to it being
slightly off, potentially having us hit a debug assertion when later checking the route's total value matches
already_collected_value_msat. Here, we therefore add the extra fees to value_contribution_msat.

Moreover, we switch a calculation updating the used liquidity to use saturating_add, as it could potentially overflow and panic in debug.

We also include a number of follow-ups for #2417.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2544d6b to b51e86eCompareSeptember 14, 2023 14:56
@tnull
tnull marked this pull request as draft September 14, 2023 15:11
@tnull

Copy link
Copy Markdown
ContributorAuthor

Put in draft while taking another look at the failing test.

Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from b51e86e to 8d4490cCompareSeptember 15, 2023 07:25
@tnull
tnull marked this pull request as ready for review September 15, 2023 07:29

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get a test for this, but LGTM.

@TheBlueMattTheBlueMatt added this to the 0.0.117 milestone Sep 17, 2023
@tnulltnull mentioned this pull request Sep 18, 2023
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Feel free to squash the fixup.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 8d4490c to 50c9dbaCompareSeptember 19, 2023 07:10
@tnull

Copy link
Copy Markdown
ContributorAuthor

Feel free to squash the fixup.

Squashed without further changes for now.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 50c9dba to 85da1a1CompareSeptember 22, 2023 14:53
@codecov-commenter

codecov-commenter commented Sep 22, 2023

Copy link
Copy Markdown

Codecov Report

Attention: 8 lines in your changes are missing coverage. Please review.

Comparison is base (7b4fb9d) 88.98% compared to head (be1088a) 89.00%.
Report is 4 commits behind head on main.

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@ Coverage Diff @@## main #2575 +/- ##
==========================================
+ Coverage 88.98% 89.00% +0.02% 
==========================================
Files 113 113 Lines 86291 86897 +606 Branches 86291 86897 +606 ==========================================
+ Hits 76787 77345 +558 - Misses 7267 7300 +33 - Partials 2237 2252 +15 
FilesCoverage Δ
lightning/src/ln/payment_tests.rs98.20% <100.00%> (+0.07%)⬆️
lightning/src/routing/router.rs93.85% <100.00%> (+<0.01%)⬆️
lightning/src/util/test_utils.rs76.96% <100.00%> (+0.02%)⬆️
lightning/src/ln/outbound_payment.rs88.56% <69.23%> (-0.36%)⬇️

... and 12 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from dec0e12 to 0373099CompareSeptember 22, 2023 15:44

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is missing test coverage for the various fixes, which would be really nice to include given the possibility of regressions.

Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 0373099 to 15a18b8CompareSeptember 25, 2023 12:59
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from 4a2d62a to fcd9fcaCompareSeptember 26, 2023 10:30
Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/ln/outbound_payment.rs Outdated
@tnulltnull mentioned this pull request Sep 27, 2023
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2496db9 to f39790dCompareSeptember 27, 2023 14:54
@tnulltnull changed the title Router: Account for extra fees in value contributionVarious router fixes and #2339 follow-upsSep 27, 2023
@tnulltnull changed the title Various router fixes and #2339 follow-upsVarious router fixes and #2417 follow-upsSep 27, 2023
Comment threadlightning/src/routing/router.rs
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from d7ab0ef to aa6a612CompareSeptember 27, 2023 19:14
Comment threadlightning/src/ln/payment_tests.rs Outdated
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
// the regular network graph.
our_node_id == first_hop_src_id ||

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get test coverage of this at some point

@tnulltnullSep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, unfortunately not sure if it will make it in this PR though, if we want to land it for 117.

Comment threadlightning/src/ln/outbound_payment.rs Outdated
Comment threadlightning/src/ln/payment_tests.rs
Previously this calculation could overflow, leading to panicking in `debug`.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 4 times, most recently from 5a5f7d1 to 98c9849CompareSeptember 28, 2023 09:13
@tnull

tnull commented Sep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Rebased on main, fixed the route_params handling in a bunch of tests and dropped the cmp::min and now just calculate the retry final_value_msat by deducting the sum of the succeeded paths' values from the previous final_value_msat.

Comment threadlightning/src/routing/router.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

LGTM, feel free to squash, I think.

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM after squash

Comment threadlightning/src/routing/router.rs Outdated
Previously, we would only consider route hints if we had a direct
channel to the first node in the hint or if the first node in the hint
was part of the public network graph.
However, this left out the possiblity of us being part of the first hop,
especially if our own node is not announced and part of the graph.
If we have a direct channel to a node generating an invoice with route
hints, we'd previously happily add multiple candidates that all refer to
the same channel. To keep our candidate set small and unify our tracking
where possible, we now check if its `short_channel_id` is an
`outbound_scid_alias` of any of our first hops and refrain from adding
another candidate if it's the case.
Previously, if an overpaid path would fail immediately, we'd retry a
`PartialFailure` with the full path amount, _including_ any overpayment.
Here, we now subtract the succeeded paths' values from the
net. value to exclude the overpaid amounts on retry.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from dbad082 to be1088aCompareSeptember 28, 2023 17:45
@tnull

Copy link
Copy Markdown
ContributorAuthor

Squashed fixups and included following changes:

> git diff-tree -U2 dbad0824 be1088acdiff --git a/lightning/src/routing/router.rs b/lightning/src/routing/router.rs
index 4252cd40..193fe352 100644
--- a/lightning/src/routing/router.rs+++ b/lightning/src/routing/router.rs@@ -2143,7 +2143,6 @@ where L::Target: Logger {
.filter(|route| !route.0.is_empty())
{
- let first_hop_in_route = &(route.0)[0];- let first_hop_src_id = NodeId::from_pubkey(&first_hop_in_route.src_node_id);- let have_hop_src_in_graph =+ let first_hop_src_id = NodeId::from_pubkey(&route.0.first().unwrap().src_node_id);+ let first_hop_src_is_reachable =
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
@@ -2152,5 +2151,5 @@ where L::Target: Logger {
first_hop_targets.get(&first_hop_src_id).is_some() ||
network_nodes.get(&first_hop_src_id).is_some();
- if have_hop_src_in_graph {+ if first_hop_src_is_reachable {
// We start building the path from reverse, i.e., from payee
// to the first RouteHintHop in the path.

@TheBlueMatt
TheBlueMatt merged commit 1e6707d into lightningdevkit:mainSep 28, 2023
TheBlueMatt added a commit that referenced this pull request Oct 15, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tnull@TheBlueMatt@codecov-commenter@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Various router fixes and #2417 follow-ups - #2575

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic
Sep 28, 2023
Merged

Various router fixes and #2417 follow-ups#2575
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic

Conversation

@tnull

@tnulltnull commented Sep 14, 2023

Copy link
Copy Markdown
Contributor

Based on #2570.

When overpaying to meet htlc_minimum_msat, we update the path value and recompute fees accordingly. However, so far we didn't account for the extra paid fees in value_contribution_msat, which leads to it being
slightly off, potentially having us hit a debug assertion when later checking the route's total value matches
already_collected_value_msat. Here, we therefore add the extra fees to value_contribution_msat.

Moreover, we switch a calculation updating the used liquidity to use saturating_add, as it could potentially overflow and panic in debug.

We also include a number of follow-ups for #2417.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2544d6b to b51e86eCompareSeptember 14, 2023 14:56
@tnull
tnull marked this pull request as draft September 14, 2023 15:11
@tnull

Copy link
Copy Markdown
ContributorAuthor

Put in draft while taking another look at the failing test.

Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from b51e86e to 8d4490cCompareSeptember 15, 2023 07:25
@tnull
tnull marked this pull request as ready for review September 15, 2023 07:29

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get a test for this, but LGTM.

@TheBlueMattTheBlueMatt added this to the 0.0.117 milestone Sep 17, 2023
@tnulltnull mentioned this pull request Sep 18, 2023
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Feel free to squash the fixup.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 8d4490c to 50c9dbaCompareSeptember 19, 2023 07:10
@tnull

Copy link
Copy Markdown
ContributorAuthor

Feel free to squash the fixup.

Squashed without further changes for now.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 50c9dba to 85da1a1CompareSeptember 22, 2023 14:53
@codecov-commenter

codecov-commenter commented Sep 22, 2023

Copy link
Copy Markdown

Codecov Report

Attention: 8 lines in your changes are missing coverage. Please review.

Comparison is base (7b4fb9d) 88.98% compared to head (be1088a) 89.00%.
Report is 4 commits behind head on main.

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@ Coverage Diff @@## main #2575 +/- ##
==========================================
+ Coverage 88.98% 89.00% +0.02% 
==========================================
Files 113 113 Lines 86291 86897 +606 Branches 86291 86897 +606 ==========================================
+ Hits 76787 77345 +558 - Misses 7267 7300 +33 - Partials 2237 2252 +15 
FilesCoverage Δ
lightning/src/ln/payment_tests.rs98.20% <100.00%> (+0.07%)⬆️
lightning/src/routing/router.rs93.85% <100.00%> (+<0.01%)⬆️
lightning/src/util/test_utils.rs76.96% <100.00%> (+0.02%)⬆️
lightning/src/ln/outbound_payment.rs88.56% <69.23%> (-0.36%)⬇️

... and 12 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from dec0e12 to 0373099CompareSeptember 22, 2023 15:44

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is missing test coverage for the various fixes, which would be really nice to include given the possibility of regressions.

Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 0373099 to 15a18b8CompareSeptember 25, 2023 12:59
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from 4a2d62a to fcd9fcaCompareSeptember 26, 2023 10:30
Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/ln/outbound_payment.rs Outdated
@tnulltnull mentioned this pull request Sep 27, 2023
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2496db9 to f39790dCompareSeptember 27, 2023 14:54
@tnulltnull changed the title Router: Account for extra fees in value contributionVarious router fixes and #2339 follow-upsSep 27, 2023
@tnulltnull changed the title Various router fixes and #2339 follow-upsVarious router fixes and #2417 follow-upsSep 27, 2023
Comment threadlightning/src/routing/router.rs
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from d7ab0ef to aa6a612CompareSeptember 27, 2023 19:14
Comment threadlightning/src/ln/payment_tests.rs Outdated
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
// the regular network graph.
our_node_id == first_hop_src_id ||

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get test coverage of this at some point

@tnulltnullSep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, unfortunately not sure if it will make it in this PR though, if we want to land it for 117.

Comment threadlightning/src/ln/outbound_payment.rs Outdated
Comment threadlightning/src/ln/payment_tests.rs
Previously this calculation could overflow, leading to panicking in `debug`.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 4 times, most recently from 5a5f7d1 to 98c9849CompareSeptember 28, 2023 09:13
@tnull

tnull commented Sep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Rebased on main, fixed the route_params handling in a bunch of tests and dropped the cmp::min and now just calculate the retry final_value_msat by deducting the sum of the succeeded paths' values from the previous final_value_msat.

Comment threadlightning/src/routing/router.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

LGTM, feel free to squash, I think.

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM after squash

Comment threadlightning/src/routing/router.rs Outdated
Previously, we would only consider route hints if we had a direct
channel to the first node in the hint or if the first node in the hint
was part of the public network graph.
However, this left out the possiblity of us being part of the first hop,
especially if our own node is not announced and part of the graph.
If we have a direct channel to a node generating an invoice with route
hints, we'd previously happily add multiple candidates that all refer to
the same channel. To keep our candidate set small and unify our tracking
where possible, we now check if its `short_channel_id` is an
`outbound_scid_alias` of any of our first hops and refrain from adding
another candidate if it's the case.
Previously, if an overpaid path would fail immediately, we'd retry a
`PartialFailure` with the full path amount, _including_ any overpayment.
Here, we now subtract the succeeded paths' values from the
net. value to exclude the overpaid amounts on retry.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from dbad082 to be1088aCompareSeptember 28, 2023 17:45
@tnull

Copy link
Copy Markdown
ContributorAuthor

Squashed fixups and included following changes:

> git diff-tree -U2 dbad0824 be1088acdiff --git a/lightning/src/routing/router.rs b/lightning/src/routing/router.rs
index 4252cd40..193fe352 100644
--- a/lightning/src/routing/router.rs+++ b/lightning/src/routing/router.rs@@ -2143,7 +2143,6 @@ where L::Target: Logger {
.filter(|route| !route.0.is_empty())
{
- let first_hop_in_route = &(route.0)[0];- let first_hop_src_id = NodeId::from_pubkey(&first_hop_in_route.src_node_id);- let have_hop_src_in_graph =+ let first_hop_src_id = NodeId::from_pubkey(&route.0.first().unwrap().src_node_id);+ let first_hop_src_is_reachable =
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
@@ -2152,5 +2151,5 @@ where L::Target: Logger {
first_hop_targets.get(&first_hop_src_id).is_some() ||
network_nodes.get(&first_hop_src_id).is_some();
- if have_hop_src_in_graph {+ if first_hop_src_is_reachable {
// We start building the path from reverse, i.e., from payee
// to the first RouteHintHop in the path.

@TheBlueMatt
TheBlueMatt merged commit 1e6707d into lightningdevkit:mainSep 28, 2023
TheBlueMatt added a commit that referenced this pull request Oct 15, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tnull@TheBlueMatt@codecov-commenter@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Various router fixes and #2417 follow-ups - #2575

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic
Sep 28, 2023
Merged

Various router fixes and #2417 follow-ups#2575
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic

Conversation

@tnull

@tnulltnull commented Sep 14, 2023

Copy link
Copy Markdown
Contributor

Based on #2570.

When overpaying to meet htlc_minimum_msat, we update the path value and recompute fees accordingly. However, so far we didn't account for the extra paid fees in value_contribution_msat, which leads to it being
slightly off, potentially having us hit a debug assertion when later checking the route's total value matches
already_collected_value_msat. Here, we therefore add the extra fees to value_contribution_msat.

Moreover, we switch a calculation updating the used liquidity to use saturating_add, as it could potentially overflow and panic in debug.

We also include a number of follow-ups for #2417.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2544d6b to b51e86eCompareSeptember 14, 2023 14:56
@tnull
tnull marked this pull request as draft September 14, 2023 15:11
@tnull

Copy link
Copy Markdown
ContributorAuthor

Put in draft while taking another look at the failing test.

Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from b51e86e to 8d4490cCompareSeptember 15, 2023 07:25
@tnull
tnull marked this pull request as ready for review September 15, 2023 07:29

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get a test for this, but LGTM.

@TheBlueMattTheBlueMatt added this to the 0.0.117 milestone Sep 17, 2023
@tnulltnull mentioned this pull request Sep 18, 2023
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Feel free to squash the fixup.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 8d4490c to 50c9dbaCompareSeptember 19, 2023 07:10
@tnull

Copy link
Copy Markdown
ContributorAuthor

Feel free to squash the fixup.

Squashed without further changes for now.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 50c9dba to 85da1a1CompareSeptember 22, 2023 14:53
@codecov-commenter

codecov-commenter commented Sep 22, 2023

Copy link
Copy Markdown

Codecov Report

Attention: 8 lines in your changes are missing coverage. Please review.

Comparison is base (7b4fb9d) 88.98% compared to head (be1088a) 89.00%.
Report is 4 commits behind head on main.

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@ Coverage Diff @@## main #2575 +/- ##
==========================================
+ Coverage 88.98% 89.00% +0.02% 
==========================================
Files 113 113 Lines 86291 86897 +606 Branches 86291 86897 +606 ==========================================
+ Hits 76787 77345 +558 - Misses 7267 7300 +33 - Partials 2237 2252 +15 
FilesCoverage Δ
lightning/src/ln/payment_tests.rs98.20% <100.00%> (+0.07%)⬆️
lightning/src/routing/router.rs93.85% <100.00%> (+<0.01%)⬆️
lightning/src/util/test_utils.rs76.96% <100.00%> (+0.02%)⬆️
lightning/src/ln/outbound_payment.rs88.56% <69.23%> (-0.36%)⬇️

... and 12 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from dec0e12 to 0373099CompareSeptember 22, 2023 15:44

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is missing test coverage for the various fixes, which would be really nice to include given the possibility of regressions.

Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 0373099 to 15a18b8CompareSeptember 25, 2023 12:59
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from 4a2d62a to fcd9fcaCompareSeptember 26, 2023 10:30
Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/ln/outbound_payment.rs Outdated
@tnulltnull mentioned this pull request Sep 27, 2023
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2496db9 to f39790dCompareSeptember 27, 2023 14:54
@tnulltnull changed the title Router: Account for extra fees in value contributionVarious router fixes and #2339 follow-upsSep 27, 2023
@tnulltnull changed the title Various router fixes and #2339 follow-upsVarious router fixes and #2417 follow-upsSep 27, 2023
Comment threadlightning/src/routing/router.rs
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from d7ab0ef to aa6a612CompareSeptember 27, 2023 19:14
Comment threadlightning/src/ln/payment_tests.rs Outdated
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
// the regular network graph.
our_node_id == first_hop_src_id ||

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get test coverage of this at some point

@tnulltnullSep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, unfortunately not sure if it will make it in this PR though, if we want to land it for 117.

Comment threadlightning/src/ln/outbound_payment.rs Outdated
Comment threadlightning/src/ln/payment_tests.rs
Previously this calculation could overflow, leading to panicking in `debug`.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 4 times, most recently from 5a5f7d1 to 98c9849CompareSeptember 28, 2023 09:13
@tnull

tnull commented Sep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Rebased on main, fixed the route_params handling in a bunch of tests and dropped the cmp::min and now just calculate the retry final_value_msat by deducting the sum of the succeeded paths' values from the previous final_value_msat.

Comment threadlightning/src/routing/router.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

LGTM, feel free to squash, I think.

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM after squash

Comment threadlightning/src/routing/router.rs Outdated
Previously, we would only consider route hints if we had a direct
channel to the first node in the hint or if the first node in the hint
was part of the public network graph.
However, this left out the possiblity of us being part of the first hop,
especially if our own node is not announced and part of the graph.
If we have a direct channel to a node generating an invoice with route
hints, we'd previously happily add multiple candidates that all refer to
the same channel. To keep our candidate set small and unify our tracking
where possible, we now check if its `short_channel_id` is an
`outbound_scid_alias` of any of our first hops and refrain from adding
another candidate if it's the case.
Previously, if an overpaid path would fail immediately, we'd retry a
`PartialFailure` with the full path amount, _including_ any overpayment.
Here, we now subtract the succeeded paths' values from the
net. value to exclude the overpaid amounts on retry.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from dbad082 to be1088aCompareSeptember 28, 2023 17:45
@tnull

Copy link
Copy Markdown
ContributorAuthor

Squashed fixups and included following changes:

> git diff-tree -U2 dbad0824 be1088acdiff --git a/lightning/src/routing/router.rs b/lightning/src/routing/router.rs
index 4252cd40..193fe352 100644
--- a/lightning/src/routing/router.rs+++ b/lightning/src/routing/router.rs@@ -2143,7 +2143,6 @@ where L::Target: Logger {
.filter(|route| !route.0.is_empty())
{
- let first_hop_in_route = &(route.0)[0];- let first_hop_src_id = NodeId::from_pubkey(&first_hop_in_route.src_node_id);- let have_hop_src_in_graph =+ let first_hop_src_id = NodeId::from_pubkey(&route.0.first().unwrap().src_node_id);+ let first_hop_src_is_reachable =
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
@@ -2152,5 +2151,5 @@ where L::Target: Logger {
first_hop_targets.get(&first_hop_src_id).is_some() ||
network_nodes.get(&first_hop_src_id).is_some();
- if have_hop_src_in_graph {+ if first_hop_src_is_reachable {
// We start building the path from reverse, i.e., from payee
// to the first RouteHintHop in the path.

@TheBlueMatt
TheBlueMatt merged commit 1e6707d into lightningdevkit:mainSep 28, 2023
TheBlueMatt added a commit that referenced this pull request Oct 15, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tnull@TheBlueMatt@codecov-commenter@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Various router fixes and #2417 follow-ups - #2575

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic
Sep 28, 2023
Merged

Various router fixes and #2417 follow-ups#2575
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic

Conversation

@tnull

@tnulltnull commented Sep 14, 2023

Copy link
Copy Markdown
Contributor

Based on #2570.

When overpaying to meet htlc_minimum_msat, we update the path value and recompute fees accordingly. However, so far we didn't account for the extra paid fees in value_contribution_msat, which leads to it being
slightly off, potentially having us hit a debug assertion when later checking the route's total value matches
already_collected_value_msat. Here, we therefore add the extra fees to value_contribution_msat.

Moreover, we switch a calculation updating the used liquidity to use saturating_add, as it could potentially overflow and panic in debug.

We also include a number of follow-ups for #2417.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2544d6b to b51e86eCompareSeptember 14, 2023 14:56
@tnull
tnull marked this pull request as draft September 14, 2023 15:11
@tnull

Copy link
Copy Markdown
ContributorAuthor

Put in draft while taking another look at the failing test.

Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from b51e86e to 8d4490cCompareSeptember 15, 2023 07:25
@tnull
tnull marked this pull request as ready for review September 15, 2023 07:29

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get a test for this, but LGTM.

@TheBlueMattTheBlueMatt added this to the 0.0.117 milestone Sep 17, 2023
@tnulltnull mentioned this pull request Sep 18, 2023
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Feel free to squash the fixup.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 8d4490c to 50c9dbaCompareSeptember 19, 2023 07:10
@tnull

Copy link
Copy Markdown
ContributorAuthor

Feel free to squash the fixup.

Squashed without further changes for now.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 50c9dba to 85da1a1CompareSeptember 22, 2023 14:53
@codecov-commenter

codecov-commenter commented Sep 22, 2023

Copy link
Copy Markdown

Codecov Report

Attention: 8 lines in your changes are missing coverage. Please review.

Comparison is base (7b4fb9d) 88.98% compared to head (be1088a) 89.00%.
Report is 4 commits behind head on main.

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@ Coverage Diff @@## main #2575 +/- ##
==========================================
+ Coverage 88.98% 89.00% +0.02% 
==========================================
Files 113 113 Lines 86291 86897 +606 Branches 86291 86897 +606 ==========================================
+ Hits 76787 77345 +558 - Misses 7267 7300 +33 - Partials 2237 2252 +15 
FilesCoverage Δ
lightning/src/ln/payment_tests.rs98.20% <100.00%> (+0.07%)⬆️
lightning/src/routing/router.rs93.85% <100.00%> (+<0.01%)⬆️
lightning/src/util/test_utils.rs76.96% <100.00%> (+0.02%)⬆️
lightning/src/ln/outbound_payment.rs88.56% <69.23%> (-0.36%)⬇️

... and 12 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from dec0e12 to 0373099CompareSeptember 22, 2023 15:44

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is missing test coverage for the various fixes, which would be really nice to include given the possibility of regressions.

Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 0373099 to 15a18b8CompareSeptember 25, 2023 12:59
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from 4a2d62a to fcd9fcaCompareSeptember 26, 2023 10:30
Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/ln/outbound_payment.rs Outdated
@tnulltnull mentioned this pull request Sep 27, 2023
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2496db9 to f39790dCompareSeptember 27, 2023 14:54
@tnulltnull changed the title Router: Account for extra fees in value contributionVarious router fixes and #2339 follow-upsSep 27, 2023
@tnulltnull changed the title Various router fixes and #2339 follow-upsVarious router fixes and #2417 follow-upsSep 27, 2023
Comment threadlightning/src/routing/router.rs
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from d7ab0ef to aa6a612CompareSeptember 27, 2023 19:14
Comment threadlightning/src/ln/payment_tests.rs Outdated
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
// the regular network graph.
our_node_id == first_hop_src_id ||

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get test coverage of this at some point

@tnulltnullSep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, unfortunately not sure if it will make it in this PR though, if we want to land it for 117.

Comment threadlightning/src/ln/outbound_payment.rs Outdated
Comment threadlightning/src/ln/payment_tests.rs
Previously this calculation could overflow, leading to panicking in `debug`.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 4 times, most recently from 5a5f7d1 to 98c9849CompareSeptember 28, 2023 09:13
@tnull

tnull commented Sep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Rebased on main, fixed the route_params handling in a bunch of tests and dropped the cmp::min and now just calculate the retry final_value_msat by deducting the sum of the succeeded paths' values from the previous final_value_msat.

Comment threadlightning/src/routing/router.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

LGTM, feel free to squash, I think.

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM after squash

Comment threadlightning/src/routing/router.rs Outdated
Previously, we would only consider route hints if we had a direct
channel to the first node in the hint or if the first node in the hint
was part of the public network graph.
However, this left out the possiblity of us being part of the first hop,
especially if our own node is not announced and part of the graph.
If we have a direct channel to a node generating an invoice with route
hints, we'd previously happily add multiple candidates that all refer to
the same channel. To keep our candidate set small and unify our tracking
where possible, we now check if its `short_channel_id` is an
`outbound_scid_alias` of any of our first hops and refrain from adding
another candidate if it's the case.
Previously, if an overpaid path would fail immediately, we'd retry a
`PartialFailure` with the full path amount, _including_ any overpayment.
Here, we now subtract the succeeded paths' values from the
net. value to exclude the overpaid amounts on retry.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from dbad082 to be1088aCompareSeptember 28, 2023 17:45
@tnull

Copy link
Copy Markdown
ContributorAuthor

Squashed fixups and included following changes:

> git diff-tree -U2 dbad0824 be1088acdiff --git a/lightning/src/routing/router.rs b/lightning/src/routing/router.rs
index 4252cd40..193fe352 100644
--- a/lightning/src/routing/router.rs+++ b/lightning/src/routing/router.rs@@ -2143,7 +2143,6 @@ where L::Target: Logger {
.filter(|route| !route.0.is_empty())
{
- let first_hop_in_route = &(route.0)[0];- let first_hop_src_id = NodeId::from_pubkey(&first_hop_in_route.src_node_id);- let have_hop_src_in_graph =+ let first_hop_src_id = NodeId::from_pubkey(&route.0.first().unwrap().src_node_id);+ let first_hop_src_is_reachable =
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
@@ -2152,5 +2151,5 @@ where L::Target: Logger {
first_hop_targets.get(&first_hop_src_id).is_some() ||
network_nodes.get(&first_hop_src_id).is_some();
- if have_hop_src_in_graph {+ if first_hop_src_is_reachable {
// We start building the path from reverse, i.e., from payee
// to the first RouteHintHop in the path.

@TheBlueMatt
TheBlueMatt merged commit 1e6707d into lightningdevkit:mainSep 28, 2023
TheBlueMatt added a commit that referenced this pull request Oct 15, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tnull@TheBlueMatt@codecov-commenter@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Various router fixes and #2417 follow-ups - #2575

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic
Sep 28, 2023
Merged

Various router fixes and #2417 follow-ups#2575
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic

Conversation

@tnull

@tnulltnull commented Sep 14, 2023

Copy link
Copy Markdown
Contributor

Based on #2570.

When overpaying to meet htlc_minimum_msat, we update the path value and recompute fees accordingly. However, so far we didn't account for the extra paid fees in value_contribution_msat, which leads to it being
slightly off, potentially having us hit a debug assertion when later checking the route's total value matches
already_collected_value_msat. Here, we therefore add the extra fees to value_contribution_msat.

Moreover, we switch a calculation updating the used liquidity to use saturating_add, as it could potentially overflow and panic in debug.

We also include a number of follow-ups for #2417.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2544d6b to b51e86eCompareSeptember 14, 2023 14:56
@tnull
tnull marked this pull request as draft September 14, 2023 15:11
@tnull

Copy link
Copy Markdown
ContributorAuthor

Put in draft while taking another look at the failing test.

Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from b51e86e to 8d4490cCompareSeptember 15, 2023 07:25
@tnull
tnull marked this pull request as ready for review September 15, 2023 07:29

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get a test for this, but LGTM.

@TheBlueMattTheBlueMatt added this to the 0.0.117 milestone Sep 17, 2023
@tnulltnull mentioned this pull request Sep 18, 2023
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Feel free to squash the fixup.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 8d4490c to 50c9dbaCompareSeptember 19, 2023 07:10
@tnull

Copy link
Copy Markdown
ContributorAuthor

Feel free to squash the fixup.

Squashed without further changes for now.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 50c9dba to 85da1a1CompareSeptember 22, 2023 14:53
@codecov-commenter

codecov-commenter commented Sep 22, 2023

Copy link
Copy Markdown

Codecov Report

Attention: 8 lines in your changes are missing coverage. Please review.

Comparison is base (7b4fb9d) 88.98% compared to head (be1088a) 89.00%.
Report is 4 commits behind head on main.

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@ Coverage Diff @@## main #2575 +/- ##
==========================================
+ Coverage 88.98% 89.00% +0.02% 
==========================================
Files 113 113 Lines 86291 86897 +606 Branches 86291 86897 +606 ==========================================
+ Hits 76787 77345 +558 - Misses 7267 7300 +33 - Partials 2237 2252 +15 
FilesCoverage Δ
lightning/src/ln/payment_tests.rs98.20% <100.00%> (+0.07%)⬆️
lightning/src/routing/router.rs93.85% <100.00%> (+<0.01%)⬆️
lightning/src/util/test_utils.rs76.96% <100.00%> (+0.02%)⬆️
lightning/src/ln/outbound_payment.rs88.56% <69.23%> (-0.36%)⬇️

... and 12 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from dec0e12 to 0373099CompareSeptember 22, 2023 15:44

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is missing test coverage for the various fixes, which would be really nice to include given the possibility of regressions.

Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 0373099 to 15a18b8CompareSeptember 25, 2023 12:59
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from 4a2d62a to fcd9fcaCompareSeptember 26, 2023 10:30
Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/ln/outbound_payment.rs Outdated
@tnulltnull mentioned this pull request Sep 27, 2023
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2496db9 to f39790dCompareSeptember 27, 2023 14:54
@tnulltnull changed the title Router: Account for extra fees in value contributionVarious router fixes and #2339 follow-upsSep 27, 2023
@tnulltnull changed the title Various router fixes and #2339 follow-upsVarious router fixes and #2417 follow-upsSep 27, 2023
Comment threadlightning/src/routing/router.rs
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from d7ab0ef to aa6a612CompareSeptember 27, 2023 19:14
Comment threadlightning/src/ln/payment_tests.rs Outdated
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
// the regular network graph.
our_node_id == first_hop_src_id ||

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get test coverage of this at some point

@tnulltnullSep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, unfortunately not sure if it will make it in this PR though, if we want to land it for 117.

Comment threadlightning/src/ln/outbound_payment.rs Outdated
Comment threadlightning/src/ln/payment_tests.rs
Previously this calculation could overflow, leading to panicking in `debug`.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 4 times, most recently from 5a5f7d1 to 98c9849CompareSeptember 28, 2023 09:13
@tnull

tnull commented Sep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Rebased on main, fixed the route_params handling in a bunch of tests and dropped the cmp::min and now just calculate the retry final_value_msat by deducting the sum of the succeeded paths' values from the previous final_value_msat.

Comment threadlightning/src/routing/router.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

LGTM, feel free to squash, I think.

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM after squash

Comment threadlightning/src/routing/router.rs Outdated
Previously, we would only consider route hints if we had a direct
channel to the first node in the hint or if the first node in the hint
was part of the public network graph.
However, this left out the possiblity of us being part of the first hop,
especially if our own node is not announced and part of the graph.
If we have a direct channel to a node generating an invoice with route
hints, we'd previously happily add multiple candidates that all refer to
the same channel. To keep our candidate set small and unify our tracking
where possible, we now check if its `short_channel_id` is an
`outbound_scid_alias` of any of our first hops and refrain from adding
another candidate if it's the case.
Previously, if an overpaid path would fail immediately, we'd retry a
`PartialFailure` with the full path amount, _including_ any overpayment.
Here, we now subtract the succeeded paths' values from the
net. value to exclude the overpaid amounts on retry.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from dbad082 to be1088aCompareSeptember 28, 2023 17:45
@tnull

Copy link
Copy Markdown
ContributorAuthor

Squashed fixups and included following changes:

> git diff-tree -U2 dbad0824 be1088acdiff --git a/lightning/src/routing/router.rs b/lightning/src/routing/router.rs
index 4252cd40..193fe352 100644
--- a/lightning/src/routing/router.rs+++ b/lightning/src/routing/router.rs@@ -2143,7 +2143,6 @@ where L::Target: Logger {
.filter(|route| !route.0.is_empty())
{
- let first_hop_in_route = &(route.0)[0];- let first_hop_src_id = NodeId::from_pubkey(&first_hop_in_route.src_node_id);- let have_hop_src_in_graph =+ let first_hop_src_id = NodeId::from_pubkey(&route.0.first().unwrap().src_node_id);+ let first_hop_src_is_reachable =
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
@@ -2152,5 +2151,5 @@ where L::Target: Logger {
first_hop_targets.get(&first_hop_src_id).is_some() ||
network_nodes.get(&first_hop_src_id).is_some();
- if have_hop_src_in_graph {+ if first_hop_src_is_reachable {
// We start building the path from reverse, i.e., from payee
// to the first RouteHintHop in the path.

@TheBlueMatt
TheBlueMatt merged commit 1e6707d into lightningdevkit:mainSep 28, 2023
TheBlueMatt added a commit that referenced this pull request Oct 15, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tnull@TheBlueMatt@codecov-commenter@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Various router fixes and #2417 follow-ups - #2575

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic
Sep 28, 2023
Merged

Various router fixes and #2417 follow-ups#2575
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic

Conversation

@tnull

@tnulltnull commented Sep 14, 2023

Copy link
Copy Markdown
Contributor

Based on #2570.

When overpaying to meet htlc_minimum_msat, we update the path value and recompute fees accordingly. However, so far we didn't account for the extra paid fees in value_contribution_msat, which leads to it being
slightly off, potentially having us hit a debug assertion when later checking the route's total value matches
already_collected_value_msat. Here, we therefore add the extra fees to value_contribution_msat.

Moreover, we switch a calculation updating the used liquidity to use saturating_add, as it could potentially overflow and panic in debug.

We also include a number of follow-ups for #2417.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2544d6b to b51e86eCompareSeptember 14, 2023 14:56
@tnull
tnull marked this pull request as draft September 14, 2023 15:11
@tnull

Copy link
Copy Markdown
ContributorAuthor

Put in draft while taking another look at the failing test.

Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from b51e86e to 8d4490cCompareSeptember 15, 2023 07:25
@tnull
tnull marked this pull request as ready for review September 15, 2023 07:29

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get a test for this, but LGTM.

@TheBlueMattTheBlueMatt added this to the 0.0.117 milestone Sep 17, 2023
@tnulltnull mentioned this pull request Sep 18, 2023
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Feel free to squash the fixup.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 8d4490c to 50c9dbaCompareSeptember 19, 2023 07:10
@tnull

Copy link
Copy Markdown
ContributorAuthor

Feel free to squash the fixup.

Squashed without further changes for now.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 50c9dba to 85da1a1CompareSeptember 22, 2023 14:53
@codecov-commenter

codecov-commenter commented Sep 22, 2023

Copy link
Copy Markdown

Codecov Report

Attention: 8 lines in your changes are missing coverage. Please review.

Comparison is base (7b4fb9d) 88.98% compared to head (be1088a) 89.00%.
Report is 4 commits behind head on main.

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@ Coverage Diff @@## main #2575 +/- ##
==========================================
+ Coverage 88.98% 89.00% +0.02% 
==========================================
Files 113 113 Lines 86291 86897 +606 Branches 86291 86897 +606 ==========================================
+ Hits 76787 77345 +558 - Misses 7267 7300 +33 - Partials 2237 2252 +15 
FilesCoverage Δ
lightning/src/ln/payment_tests.rs98.20% <100.00%> (+0.07%)⬆️
lightning/src/routing/router.rs93.85% <100.00%> (+<0.01%)⬆️
lightning/src/util/test_utils.rs76.96% <100.00%> (+0.02%)⬆️
lightning/src/ln/outbound_payment.rs88.56% <69.23%> (-0.36%)⬇️

... and 12 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from dec0e12 to 0373099CompareSeptember 22, 2023 15:44

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is missing test coverage for the various fixes, which would be really nice to include given the possibility of regressions.

Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 0373099 to 15a18b8CompareSeptember 25, 2023 12:59
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from 4a2d62a to fcd9fcaCompareSeptember 26, 2023 10:30
Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/ln/outbound_payment.rs Outdated
@tnulltnull mentioned this pull request Sep 27, 2023
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2496db9 to f39790dCompareSeptember 27, 2023 14:54
@tnulltnull changed the title Router: Account for extra fees in value contributionVarious router fixes and #2339 follow-upsSep 27, 2023
@tnulltnull changed the title Various router fixes and #2339 follow-upsVarious router fixes and #2417 follow-upsSep 27, 2023
Comment threadlightning/src/routing/router.rs
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from d7ab0ef to aa6a612CompareSeptember 27, 2023 19:14
Comment threadlightning/src/ln/payment_tests.rs Outdated
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
// the regular network graph.
our_node_id == first_hop_src_id ||

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get test coverage of this at some point

@tnulltnullSep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, unfortunately not sure if it will make it in this PR though, if we want to land it for 117.

Comment threadlightning/src/ln/outbound_payment.rs Outdated
Comment threadlightning/src/ln/payment_tests.rs
Previously this calculation could overflow, leading to panicking in `debug`.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 4 times, most recently from 5a5f7d1 to 98c9849CompareSeptember 28, 2023 09:13
@tnull

tnull commented Sep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Rebased on main, fixed the route_params handling in a bunch of tests and dropped the cmp::min and now just calculate the retry final_value_msat by deducting the sum of the succeeded paths' values from the previous final_value_msat.

Comment threadlightning/src/routing/router.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

LGTM, feel free to squash, I think.

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM after squash

Comment threadlightning/src/routing/router.rs Outdated
Previously, we would only consider route hints if we had a direct
channel to the first node in the hint or if the first node in the hint
was part of the public network graph.
However, this left out the possiblity of us being part of the first hop,
especially if our own node is not announced and part of the graph.
If we have a direct channel to a node generating an invoice with route
hints, we'd previously happily add multiple candidates that all refer to
the same channel. To keep our candidate set small and unify our tracking
where possible, we now check if its `short_channel_id` is an
`outbound_scid_alias` of any of our first hops and refrain from adding
another candidate if it's the case.
Previously, if an overpaid path would fail immediately, we'd retry a
`PartialFailure` with the full path amount, _including_ any overpayment.
Here, we now subtract the succeeded paths' values from the
net. value to exclude the overpaid amounts on retry.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from dbad082 to be1088aCompareSeptember 28, 2023 17:45
@tnull

Copy link
Copy Markdown
ContributorAuthor

Squashed fixups and included following changes:

> git diff-tree -U2 dbad0824 be1088acdiff --git a/lightning/src/routing/router.rs b/lightning/src/routing/router.rs
index 4252cd40..193fe352 100644
--- a/lightning/src/routing/router.rs+++ b/lightning/src/routing/router.rs@@ -2143,7 +2143,6 @@ where L::Target: Logger {
.filter(|route| !route.0.is_empty())
{
- let first_hop_in_route = &(route.0)[0];- let first_hop_src_id = NodeId::from_pubkey(&first_hop_in_route.src_node_id);- let have_hop_src_in_graph =+ let first_hop_src_id = NodeId::from_pubkey(&route.0.first().unwrap().src_node_id);+ let first_hop_src_is_reachable =
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
@@ -2152,5 +2151,5 @@ where L::Target: Logger {
first_hop_targets.get(&first_hop_src_id).is_some() ||
network_nodes.get(&first_hop_src_id).is_some();
- if have_hop_src_in_graph {+ if first_hop_src_is_reachable {
// We start building the path from reverse, i.e., from payee
// to the first RouteHintHop in the path.

@TheBlueMatt
TheBlueMatt merged commit 1e6707d into lightningdevkit:mainSep 28, 2023
TheBlueMatt added a commit that referenced this pull request Oct 15, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tnull@TheBlueMatt@codecov-commenter@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Various router fixes and #2417 follow-ups - #2575

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic
Sep 28, 2023
Merged

Various router fixes and #2417 follow-ups#2575
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic

Conversation

@tnull

@tnulltnull commented Sep 14, 2023

Copy link
Copy Markdown
Contributor

Based on #2570.

When overpaying to meet htlc_minimum_msat, we update the path value and recompute fees accordingly. However, so far we didn't account for the extra paid fees in value_contribution_msat, which leads to it being
slightly off, potentially having us hit a debug assertion when later checking the route's total value matches
already_collected_value_msat. Here, we therefore add the extra fees to value_contribution_msat.

Moreover, we switch a calculation updating the used liquidity to use saturating_add, as it could potentially overflow and panic in debug.

We also include a number of follow-ups for #2417.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2544d6b to b51e86eCompareSeptember 14, 2023 14:56
@tnull
tnull marked this pull request as draft September 14, 2023 15:11
@tnull

Copy link
Copy Markdown
ContributorAuthor

Put in draft while taking another look at the failing test.

Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from b51e86e to 8d4490cCompareSeptember 15, 2023 07:25
@tnull
tnull marked this pull request as ready for review September 15, 2023 07:29

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get a test for this, but LGTM.

@TheBlueMattTheBlueMatt added this to the 0.0.117 milestone Sep 17, 2023
@tnulltnull mentioned this pull request Sep 18, 2023
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Feel free to squash the fixup.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 8d4490c to 50c9dbaCompareSeptember 19, 2023 07:10
@tnull

Copy link
Copy Markdown
ContributorAuthor

Feel free to squash the fixup.

Squashed without further changes for now.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 50c9dba to 85da1a1CompareSeptember 22, 2023 14:53
@codecov-commenter

codecov-commenter commented Sep 22, 2023

Copy link
Copy Markdown

Codecov Report

Attention: 8 lines in your changes are missing coverage. Please review.

Comparison is base (7b4fb9d) 88.98% compared to head (be1088a) 89.00%.
Report is 4 commits behind head on main.

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@ Coverage Diff @@## main #2575 +/- ##
==========================================
+ Coverage 88.98% 89.00% +0.02% 
==========================================
Files 113 113 Lines 86291 86897 +606 Branches 86291 86897 +606 ==========================================
+ Hits 76787 77345 +558 - Misses 7267 7300 +33 - Partials 2237 2252 +15 
FilesCoverage Δ
lightning/src/ln/payment_tests.rs98.20% <100.00%> (+0.07%)⬆️
lightning/src/routing/router.rs93.85% <100.00%> (+<0.01%)⬆️
lightning/src/util/test_utils.rs76.96% <100.00%> (+0.02%)⬆️
lightning/src/ln/outbound_payment.rs88.56% <69.23%> (-0.36%)⬇️

... and 12 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from dec0e12 to 0373099CompareSeptember 22, 2023 15:44

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is missing test coverage for the various fixes, which would be really nice to include given the possibility of regressions.

Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 0373099 to 15a18b8CompareSeptember 25, 2023 12:59
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from 4a2d62a to fcd9fcaCompareSeptember 26, 2023 10:30
Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/ln/outbound_payment.rs Outdated
@tnulltnull mentioned this pull request Sep 27, 2023
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2496db9 to f39790dCompareSeptember 27, 2023 14:54
@tnulltnull changed the title Router: Account for extra fees in value contributionVarious router fixes and #2339 follow-upsSep 27, 2023
@tnulltnull changed the title Various router fixes and #2339 follow-upsVarious router fixes and #2417 follow-upsSep 27, 2023
Comment threadlightning/src/routing/router.rs
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from d7ab0ef to aa6a612CompareSeptember 27, 2023 19:14
Comment threadlightning/src/ln/payment_tests.rs Outdated
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
// the regular network graph.
our_node_id == first_hop_src_id ||

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get test coverage of this at some point

@tnulltnullSep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, unfortunately not sure if it will make it in this PR though, if we want to land it for 117.

Comment threadlightning/src/ln/outbound_payment.rs Outdated
Comment threadlightning/src/ln/payment_tests.rs
Previously this calculation could overflow, leading to panicking in `debug`.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 4 times, most recently from 5a5f7d1 to 98c9849CompareSeptember 28, 2023 09:13
@tnull

tnull commented Sep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Rebased on main, fixed the route_params handling in a bunch of tests and dropped the cmp::min and now just calculate the retry final_value_msat by deducting the sum of the succeeded paths' values from the previous final_value_msat.

Comment threadlightning/src/routing/router.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

LGTM, feel free to squash, I think.

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM after squash

Comment threadlightning/src/routing/router.rs Outdated
Previously, we would only consider route hints if we had a direct
channel to the first node in the hint or if the first node in the hint
was part of the public network graph.
However, this left out the possiblity of us being part of the first hop,
especially if our own node is not announced and part of the graph.
If we have a direct channel to a node generating an invoice with route
hints, we'd previously happily add multiple candidates that all refer to
the same channel. To keep our candidate set small and unify our tracking
where possible, we now check if its `short_channel_id` is an
`outbound_scid_alias` of any of our first hops and refrain from adding
another candidate if it's the case.
Previously, if an overpaid path would fail immediately, we'd retry a
`PartialFailure` with the full path amount, _including_ any overpayment.
Here, we now subtract the succeeded paths' values from the
net. value to exclude the overpaid amounts on retry.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from dbad082 to be1088aCompareSeptember 28, 2023 17:45
@tnull

Copy link
Copy Markdown
ContributorAuthor

Squashed fixups and included following changes:

> git diff-tree -U2 dbad0824 be1088acdiff --git a/lightning/src/routing/router.rs b/lightning/src/routing/router.rs
index 4252cd40..193fe352 100644
--- a/lightning/src/routing/router.rs+++ b/lightning/src/routing/router.rs@@ -2143,7 +2143,6 @@ where L::Target: Logger {
.filter(|route| !route.0.is_empty())
{
- let first_hop_in_route = &(route.0)[0];- let first_hop_src_id = NodeId::from_pubkey(&first_hop_in_route.src_node_id);- let have_hop_src_in_graph =+ let first_hop_src_id = NodeId::from_pubkey(&route.0.first().unwrap().src_node_id);+ let first_hop_src_is_reachable =
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
@@ -2152,5 +2151,5 @@ where L::Target: Logger {
first_hop_targets.get(&first_hop_src_id).is_some() ||
network_nodes.get(&first_hop_src_id).is_some();
- if have_hop_src_in_graph {+ if first_hop_src_is_reachable {
// We start building the path from reverse, i.e., from payee
// to the first RouteHintHop in the path.

@TheBlueMatt
TheBlueMatt merged commit 1e6707d into lightningdevkit:mainSep 28, 2023
TheBlueMatt added a commit that referenced this pull request Oct 15, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tnull@TheBlueMatt@codecov-commenter@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Various router fixes and #2417 follow-ups - #2575

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic
Sep 28, 2023
Merged

Various router fixes and #2417 follow-ups#2575
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
tnull:2023-09-fix-debug-panic

Conversation

@tnull

@tnulltnull commented Sep 14, 2023

Copy link
Copy Markdown
Contributor

Based on #2570.

When overpaying to meet htlc_minimum_msat, we update the path value and recompute fees accordingly. However, so far we didn't account for the extra paid fees in value_contribution_msat, which leads to it being
slightly off, potentially having us hit a debug assertion when later checking the route's total value matches
already_collected_value_msat. Here, we therefore add the extra fees to value_contribution_msat.

Moreover, we switch a calculation updating the used liquidity to use saturating_add, as it could potentially overflow and panic in debug.

We also include a number of follow-ups for #2417.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2544d6b to b51e86eCompareSeptember 14, 2023 14:56
@tnull
tnull marked this pull request as draft September 14, 2023 15:11
@tnull

Copy link
Copy Markdown
ContributorAuthor

Put in draft while taking another look at the failing test.

Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from b51e86e to 8d4490cCompareSeptember 15, 2023 07:25
@tnull
tnull marked this pull request as ready for review September 15, 2023 07:29

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get a test for this, but LGTM.

@TheBlueMattTheBlueMatt added this to the 0.0.117 milestone Sep 17, 2023
@tnulltnull mentioned this pull request Sep 18, 2023
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Feel free to squash the fixup.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 8d4490c to 50c9dbaCompareSeptember 19, 2023 07:10
@tnull

Copy link
Copy Markdown
ContributorAuthor

Feel free to squash the fixup.

Squashed without further changes for now.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 50c9dba to 85da1a1CompareSeptember 22, 2023 14:53
@codecov-commenter

codecov-commenter commented Sep 22, 2023

Copy link
Copy Markdown

Codecov Report

Attention: 8 lines in your changes are missing coverage. Please review.

Comparison is base (7b4fb9d) 88.98% compared to head (be1088a) 89.00%.
Report is 4 commits behind head on main.

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@ Coverage Diff @@## main #2575 +/- ##
==========================================
+ Coverage 88.98% 89.00% +0.02% 
==========================================
Files 113 113 Lines 86291 86897 +606 Branches 86291 86897 +606 ==========================================
+ Hits 76787 77345 +558 - Misses 7267 7300 +33 - Partials 2237 2252 +15 
FilesCoverage Δ
lightning/src/ln/payment_tests.rs98.20% <100.00%> (+0.07%)⬆️
lightning/src/routing/router.rs93.85% <100.00%> (+<0.01%)⬆️
lightning/src/util/test_utils.rs76.96% <100.00%> (+0.02%)⬆️
lightning/src/ln/outbound_payment.rs88.56% <69.23%> (-0.36%)⬇️

... and 12 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from dec0e12 to 0373099CompareSeptember 22, 2023 15:44

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is missing test coverage for the various fixes, which would be really nice to include given the possibility of regressions.

Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 0373099 to 15a18b8CompareSeptember 25, 2023 12:59
Comment threadlightning/src/routing/router.rs Outdated
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 3 times, most recently from 4a2d62a to fcd9fcaCompareSeptember 26, 2023 10:30
Comment threadlightning/src/routing/router.rs Outdated
Comment threadlightning/src/ln/outbound_payment.rs Outdated
@tnulltnull mentioned this pull request Sep 27, 2023
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from 2496db9 to f39790dCompareSeptember 27, 2023 14:54
@tnulltnull changed the title Router: Account for extra fees in value contributionVarious router fixes and #2339 follow-upsSep 27, 2023
@tnulltnull changed the title Various router fixes and #2339 follow-upsVarious router fixes and #2417 follow-upsSep 27, 2023
Comment threadlightning/src/routing/router.rs
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from d7ab0ef to aa6a612CompareSeptember 27, 2023 19:14
Comment threadlightning/src/ln/payment_tests.rs Outdated
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
// the regular network graph.
our_node_id == first_hop_src_id ||

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to get test coverage of this at some point

@tnulltnullSep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, unfortunately not sure if it will make it in this PR though, if we want to land it for 117.

Comment threadlightning/src/ln/outbound_payment.rs Outdated
Comment threadlightning/src/ln/payment_tests.rs
Previously this calculation could overflow, leading to panicking in `debug`.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch 4 times, most recently from 5a5f7d1 to 98c9849CompareSeptember 28, 2023 09:13
@tnull

tnull commented Sep 28, 2023

Copy link
Copy Markdown
ContributorAuthor

Rebased on main, fixed the route_params handling in a bunch of tests and dropped the cmp::min and now just calculate the retry final_value_msat by deducting the sum of the succeeded paths' values from the previous final_value_msat.

Comment threadlightning/src/routing/router.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

LGTM, feel free to squash, I think.

@valentinewallacevalentinewallace left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM after squash

Comment threadlightning/src/routing/router.rs Outdated
Previously, we would only consider route hints if we had a direct
channel to the first node in the hint or if the first node in the hint
was part of the public network graph.
However, this left out the possiblity of us being part of the first hop,
especially if our own node is not announced and part of the graph.
If we have a direct channel to a node generating an invoice with route
hints, we'd previously happily add multiple candidates that all refer to
the same channel. To keep our candidate set small and unify our tracking
where possible, we now check if its `short_channel_id` is an
`outbound_scid_alias` of any of our first hops and refrain from adding
another candidate if it's the case.
Previously, if an overpaid path would fail immediately, we'd retry a
`PartialFailure` with the full path amount, _including_ any overpayment.
Here, we now subtract the succeeded paths' values from the
net. value to exclude the overpaid amounts on retry.
@tnull
tnullforce-pushed the 2023-09-fix-debug-panic branch from dbad082 to be1088aCompareSeptember 28, 2023 17:45
@tnull

Copy link
Copy Markdown
ContributorAuthor

Squashed fixups and included following changes:

> git diff-tree -U2 dbad0824 be1088acdiff --git a/lightning/src/routing/router.rs b/lightning/src/routing/router.rs
index 4252cd40..193fe352 100644
--- a/lightning/src/routing/router.rs+++ b/lightning/src/routing/router.rs@@ -2143,7 +2143,6 @@ where L::Target: Logger {
.filter(|route| !route.0.is_empty())
{
- let first_hop_in_route = &(route.0)[0];- let first_hop_src_id = NodeId::from_pubkey(&first_hop_in_route.src_node_id);- let have_hop_src_in_graph =+ let first_hop_src_id = NodeId::from_pubkey(&route.0.first().unwrap().src_node_id);+ let first_hop_src_is_reachable =
// Only add the hops in this route to our candidate set if either we are part of
// the first hop, we have a direct channel to the first hop, or the first hop is in
@@ -2152,5 +2151,5 @@ where L::Target: Logger {
first_hop_targets.get(&first_hop_src_id).is_some() ||
network_nodes.get(&first_hop_src_id).is_some();
- if have_hop_src_in_graph {+ if first_hop_src_is_reachable {
// We start building the path from reverse, i.e., from payee
// to the first RouteHintHop in the path.

@TheBlueMatt
TheBlueMatt merged commit 1e6707d into lightningdevkit:mainSep 28, 2023
TheBlueMatt added a commit that referenced this pull request Oct 15, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@tnull@TheBlueMatt@codecov-commenter@valentinewallace