Skip to content

Clean up message forwarding and relay gossip messages - #948

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes
Jun 21, 2021
Merged

Clean up message forwarding and relay gossip messages#948
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

While we really should eventually clean up some of the big PeerHandler refactors and merge them, this fixes a bit of low-hanging fruit in the mean time, also adding forwarding of gossip messages which @devrandom wanted.

@codecov

codecovBot commented Jun 10, 2021

Copy link
Copy Markdown

Codecov Report

Merging #948 (895d1a8) into main (94528f0) will increase coverage by 0.03%.
The diff coverage is 26.27%.

Impacted file tree graph

@@ Coverage Diff @@## main #948 +/- ##
==========================================
+ Coverage 90.58% 90.62% +0.03% 
==========================================
Files 60 60 Lines 30423 30409 -14 ==========================================
- Hits 27560 27559 -1 + Misses 2863 2850 -13 
Impacted FilesCoverage Δ
lightning/src/ln/peer_handler.rs45.44% <26.27%> (+1.13%)⬆️
lightning/src/ln/functional_tests.rs97.17% <0.00%> (-0.05%)⬇️
lightning/src/ln/channelmanager.rs83.85% <0.00%> (-0.05%)⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 94528f0...895d1a8. Read the comment docs.

@devrandom

Copy link
Copy Markdown
Member

is there a quick explanation why do_attempt_write_data call was superfluous?

@devrandom

Copy link
Copy Markdown
Member

utACK

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

is there a quick explanation why do_attempt_write_data call was superfluous?

Not that its superfluous, but that it violates the stated API of read handling not generating reentrant callbacks, see eae0904.

@devrandom

Copy link
Copy Markdown
Member

I guess I'm asking if something else will kick off any writes that need to be sent out?

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I guess I'm asking if something else will kick off any writes that need to be sent out?

Yes, the docs indicate you need to call process_events() to flush outbound message buffers.

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Otherwise, LGTM

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
}
}

self.do_attempt_write_data(peer_descriptor, peer);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

If you remember about it, what the initial purpose of this "write-just-after-read-in-case-of-reply" ? Save a call to process_events to the API user?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Yea, just to be quicker about it - save an inertion into the peers_needing_send map and such. Its not all that critical unless the user only calls process_events in a loop and has some sleep we end up blocking on.

}
if except_node.is_some() && peer.their_node_id.as_ref() == except_node {
continue;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Should you include a non-replay-to-channel-update-broadcaster check as it's done for the 2 other gossips ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

There is no node_id field in a channel_update, its assumed the network graph can figure it out from the short_channel_id.

Ok(())
}

fn forward_broadcast_msg(&self, peers: &mut PeerHolder<Descriptor>, msg: &wire::Message, except_node: Option<&PublicKey>) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nit: forward_gossip_msg ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Presumably it could be used for any broadcast message? I like mentioning the word "broadcast" in it.


/// When the outbound buffer has this many messages, we'll stop reading bytes from the peer until
/// we manage to send messages until we reach this limit.
const OUTBOUND_BUFFER_LIMIT_READ_PAUSE: usize = 10;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Shouldn't this constant call OUTBOUND_BUFFER_LIMIT_SYNC_PAUSE ? Otherwise, it's a bit confusing given it's called in do_attempt_write_data

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, its used for both, not sure which is better to focus on. I could just call it like OUTBOUND_BUFFER_LOW_WATER_MARK which is pretty normal for these types of constants, and document in the doccomment what its used for?

@devrandom

Copy link
Copy Markdown
Member

tested ACK

Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMattTheBlueMatt mentioned this pull request Jun 17, 2021
We can never assume that messages were reliably delivered whether
we placed them in the socket or not, so there isn't a lot of use in
explicitly handling the case that a peer was not connected when we
went to send it a message.
Two TODOs are left for the generation of a `FundingAbandoned` (or
similar) event, though it ultimately belongs in `ChannelManager`.
`Julian Knutsen <julianknutsen@users.noreply.github.com>` pointed
out in a previous discussion that `read_event` can reenter user
code despite the documentation stating explicitly that it will not.
This was addressed in lightningdevkit#456 by simply codifying the reentrancy, but
its somewhat simpler to just drop the `do_attempt_write_data` call.
Ideally we could land most of Julian's work, but its still in need
of substantial git history cleanup to get it in a reviewable state
and this solves the immediate issue.
This will allow us to broadcast messages received in the next
commit.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased to fix a trivial conflict and squashed fixup commits.

@devrandomdevrandom left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

ACK other than nits

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@valentinewallace
valentinewallace self-requested a review June 21, 2021 17:32
Comment threadlightning/src/ln/peer_handler.rs
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Addressed comments (with fixup commits and one new commit at the head).

We do a lot of work to track which peers have buffers which need
to be flushed, when we could instead just try to flush ever peer's
buffer.
This avoids a now-unnecessary SocketDescriptor clone() call in
addition to cleaning up the callsite code somewhat.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with no changes. Changes since @devrandom's last ack are also trivial. Will merge after CI.

@TheBlueMatt
TheBlueMatt merged commit 2f6205b into lightningdevkit:mainJun 21, 2021
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

@TheBlueMatt@devrandom@valentinewallace@ariard
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Clean up message forwarding and relay gossip messages by TheBlueMatt · Pull Request #948 · lightningdevkit/rust-lightning · GitHub
Skip to content

Clean up message forwarding and relay gossip messages - #948

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes
Jun 21, 2021
Merged

Clean up message forwarding and relay gossip messages#948
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

While we really should eventually clean up some of the big PeerHandler refactors and merge them, this fixes a bit of low-hanging fruit in the mean time, also adding forwarding of gossip messages which @devrandom wanted.

@codecov

codecovBot commented Jun 10, 2021

Copy link
Copy Markdown

Codecov Report

Merging #948 (895d1a8) into main (94528f0) will increase coverage by 0.03%.
The diff coverage is 26.27%.

Impacted file tree graph

@@ Coverage Diff @@## main #948 +/- ##
==========================================
+ Coverage 90.58% 90.62% +0.03% 
==========================================
Files 60 60 Lines 30423 30409 -14 ==========================================
- Hits 27560 27559 -1 + Misses 2863 2850 -13 
Impacted FilesCoverage Δ
lightning/src/ln/peer_handler.rs45.44% <26.27%> (+1.13%)⬆️
lightning/src/ln/functional_tests.rs97.17% <0.00%> (-0.05%)⬇️
lightning/src/ln/channelmanager.rs83.85% <0.00%> (-0.05%)⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 94528f0...895d1a8. Read the comment docs.

@devrandom

Copy link
Copy Markdown
Member

is there a quick explanation why do_attempt_write_data call was superfluous?

@devrandom

Copy link
Copy Markdown
Member

utACK

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

is there a quick explanation why do_attempt_write_data call was superfluous?

Not that its superfluous, but that it violates the stated API of read handling not generating reentrant callbacks, see eae0904.

@devrandom

Copy link
Copy Markdown
Member

I guess I'm asking if something else will kick off any writes that need to be sent out?

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I guess I'm asking if something else will kick off any writes that need to be sent out?

Yes, the docs indicate you need to call process_events() to flush outbound message buffers.

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Otherwise, LGTM

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
}
}

self.do_attempt_write_data(peer_descriptor, peer);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

If you remember about it, what the initial purpose of this "write-just-after-read-in-case-of-reply" ? Save a call to process_events to the API user?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Yea, just to be quicker about it - save an inertion into the peers_needing_send map and such. Its not all that critical unless the user only calls process_events in a loop and has some sleep we end up blocking on.

}
if except_node.is_some() && peer.their_node_id.as_ref() == except_node {
continue;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Should you include a non-replay-to-channel-update-broadcaster check as it's done for the 2 other gossips ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

There is no node_id field in a channel_update, its assumed the network graph can figure it out from the short_channel_id.

Ok(())
}

fn forward_broadcast_msg(&self, peers: &mut PeerHolder<Descriptor>, msg: &wire::Message, except_node: Option<&PublicKey>) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nit: forward_gossip_msg ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Presumably it could be used for any broadcast message? I like mentioning the word "broadcast" in it.


/// When the outbound buffer has this many messages, we'll stop reading bytes from the peer until
/// we manage to send messages until we reach this limit.
const OUTBOUND_BUFFER_LIMIT_READ_PAUSE: usize = 10;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Shouldn't this constant call OUTBOUND_BUFFER_LIMIT_SYNC_PAUSE ? Otherwise, it's a bit confusing given it's called in do_attempt_write_data

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, its used for both, not sure which is better to focus on. I could just call it like OUTBOUND_BUFFER_LOW_WATER_MARK which is pretty normal for these types of constants, and document in the doccomment what its used for?

@devrandom

Copy link
Copy Markdown
Member

tested ACK

Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMattTheBlueMatt mentioned this pull request Jun 17, 2021
We can never assume that messages were reliably delivered whether
we placed them in the socket or not, so there isn't a lot of use in
explicitly handling the case that a peer was not connected when we
went to send it a message.
Two TODOs are left for the generation of a `FundingAbandoned` (or
similar) event, though it ultimately belongs in `ChannelManager`.
`Julian Knutsen <julianknutsen@users.noreply.github.com>` pointed
out in a previous discussion that `read_event` can reenter user
code despite the documentation stating explicitly that it will not.
This was addressed in lightningdevkit#456 by simply codifying the reentrancy, but
its somewhat simpler to just drop the `do_attempt_write_data` call.
Ideally we could land most of Julian's work, but its still in need
of substantial git history cleanup to get it in a reviewable state
and this solves the immediate issue.
This will allow us to broadcast messages received in the next
commit.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased to fix a trivial conflict and squashed fixup commits.

@devrandomdevrandom left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

ACK other than nits

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@valentinewallace
valentinewallace self-requested a review June 21, 2021 17:32
Comment threadlightning/src/ln/peer_handler.rs
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Addressed comments (with fixup commits and one new commit at the head).

We do a lot of work to track which peers have buffers which need
to be flushed, when we could instead just try to flush ever peer's
buffer.
This avoids a now-unnecessary SocketDescriptor clone() call in
addition to cleaning up the callsite code somewhat.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with no changes. Changes since @devrandom's last ack are also trivial. Will merge after CI.

@TheBlueMatt
TheBlueMatt merged commit 2f6205b into lightningdevkit:mainJun 21, 2021
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

@TheBlueMatt@devrandom@valentinewallace@ariard
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Clean up message forwarding and relay gossip messages by TheBlueMatt · Pull Request #948 · lightningdevkit/rust-lightning · GitHub
Skip to content

Clean up message forwarding and relay gossip messages - #948

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes
Jun 21, 2021
Merged

Clean up message forwarding and relay gossip messages#948
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

While we really should eventually clean up some of the big PeerHandler refactors and merge them, this fixes a bit of low-hanging fruit in the mean time, also adding forwarding of gossip messages which @devrandom wanted.

@codecov

codecovBot commented Jun 10, 2021

Copy link
Copy Markdown

Codecov Report

Merging #948 (895d1a8) into main (94528f0) will increase coverage by 0.03%.
The diff coverage is 26.27%.

Impacted file tree graph

@@ Coverage Diff @@## main #948 +/- ##
==========================================
+ Coverage 90.58% 90.62% +0.03% 
==========================================
Files 60 60 Lines 30423 30409 -14 ==========================================
- Hits 27560 27559 -1 + Misses 2863 2850 -13 
Impacted FilesCoverage Δ
lightning/src/ln/peer_handler.rs45.44% <26.27%> (+1.13%)⬆️
lightning/src/ln/functional_tests.rs97.17% <0.00%> (-0.05%)⬇️
lightning/src/ln/channelmanager.rs83.85% <0.00%> (-0.05%)⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 94528f0...895d1a8. Read the comment docs.

@devrandom

Copy link
Copy Markdown
Member

is there a quick explanation why do_attempt_write_data call was superfluous?

@devrandom

Copy link
Copy Markdown
Member

utACK

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

is there a quick explanation why do_attempt_write_data call was superfluous?

Not that its superfluous, but that it violates the stated API of read handling not generating reentrant callbacks, see eae0904.

@devrandom

Copy link
Copy Markdown
Member

I guess I'm asking if something else will kick off any writes that need to be sent out?

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I guess I'm asking if something else will kick off any writes that need to be sent out?

Yes, the docs indicate you need to call process_events() to flush outbound message buffers.

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Otherwise, LGTM

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
}
}

self.do_attempt_write_data(peer_descriptor, peer);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

If you remember about it, what the initial purpose of this "write-just-after-read-in-case-of-reply" ? Save a call to process_events to the API user?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Yea, just to be quicker about it - save an inertion into the peers_needing_send map and such. Its not all that critical unless the user only calls process_events in a loop and has some sleep we end up blocking on.

}
if except_node.is_some() && peer.their_node_id.as_ref() == except_node {
continue;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Should you include a non-replay-to-channel-update-broadcaster check as it's done for the 2 other gossips ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

There is no node_id field in a channel_update, its assumed the network graph can figure it out from the short_channel_id.

Ok(())
}

fn forward_broadcast_msg(&self, peers: &mut PeerHolder<Descriptor>, msg: &wire::Message, except_node: Option<&PublicKey>) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nit: forward_gossip_msg ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Presumably it could be used for any broadcast message? I like mentioning the word "broadcast" in it.


/// When the outbound buffer has this many messages, we'll stop reading bytes from the peer until
/// we manage to send messages until we reach this limit.
const OUTBOUND_BUFFER_LIMIT_READ_PAUSE: usize = 10;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Shouldn't this constant call OUTBOUND_BUFFER_LIMIT_SYNC_PAUSE ? Otherwise, it's a bit confusing given it's called in do_attempt_write_data

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, its used for both, not sure which is better to focus on. I could just call it like OUTBOUND_BUFFER_LOW_WATER_MARK which is pretty normal for these types of constants, and document in the doccomment what its used for?

@devrandom

Copy link
Copy Markdown
Member

tested ACK

Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMattTheBlueMatt mentioned this pull request Jun 17, 2021
We can never assume that messages were reliably delivered whether
we placed them in the socket or not, so there isn't a lot of use in
explicitly handling the case that a peer was not connected when we
went to send it a message.
Two TODOs are left for the generation of a `FundingAbandoned` (or
similar) event, though it ultimately belongs in `ChannelManager`.
`Julian Knutsen <julianknutsen@users.noreply.github.com>` pointed
out in a previous discussion that `read_event` can reenter user
code despite the documentation stating explicitly that it will not.
This was addressed in lightningdevkit#456 by simply codifying the reentrancy, but
its somewhat simpler to just drop the `do_attempt_write_data` call.
Ideally we could land most of Julian's work, but its still in need
of substantial git history cleanup to get it in a reviewable state
and this solves the immediate issue.
This will allow us to broadcast messages received in the next
commit.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased to fix a trivial conflict and squashed fixup commits.

@devrandomdevrandom left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

ACK other than nits

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@valentinewallace
valentinewallace self-requested a review June 21, 2021 17:32
Comment threadlightning/src/ln/peer_handler.rs
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Addressed comments (with fixup commits and one new commit at the head).

We do a lot of work to track which peers have buffers which need
to be flushed, when we could instead just try to flush ever peer's
buffer.
This avoids a now-unnecessary SocketDescriptor clone() call in
addition to cleaning up the callsite code somewhat.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with no changes. Changes since @devrandom's last ack are also trivial. Will merge after CI.

@TheBlueMatt
TheBlueMatt merged commit 2f6205b into lightningdevkit:mainJun 21, 2021
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

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

Clean up message forwarding and relay gossip messages - #948

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes
Jun 21, 2021
Merged

Clean up message forwarding and relay gossip messages#948
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

While we really should eventually clean up some of the big PeerHandler refactors and merge them, this fixes a bit of low-hanging fruit in the mean time, also adding forwarding of gossip messages which @devrandom wanted.

@codecov

codecovBot commented Jun 10, 2021

Copy link
Copy Markdown

Codecov Report

Merging #948 (895d1a8) into main (94528f0) will increase coverage by 0.03%.
The diff coverage is 26.27%.

Impacted file tree graph

@@ Coverage Diff @@## main #948 +/- ##
==========================================
+ Coverage 90.58% 90.62% +0.03% 
==========================================
Files 60 60 Lines 30423 30409 -14 ==========================================
- Hits 27560 27559 -1 + Misses 2863 2850 -13 
Impacted FilesCoverage Δ
lightning/src/ln/peer_handler.rs45.44% <26.27%> (+1.13%)⬆️
lightning/src/ln/functional_tests.rs97.17% <0.00%> (-0.05%)⬇️
lightning/src/ln/channelmanager.rs83.85% <0.00%> (-0.05%)⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 94528f0...895d1a8. Read the comment docs.

@devrandom

Copy link
Copy Markdown
Member

is there a quick explanation why do_attempt_write_data call was superfluous?

@devrandom

Copy link
Copy Markdown
Member

utACK

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

is there a quick explanation why do_attempt_write_data call was superfluous?

Not that its superfluous, but that it violates the stated API of read handling not generating reentrant callbacks, see eae0904.

@devrandom

Copy link
Copy Markdown
Member

I guess I'm asking if something else will kick off any writes that need to be sent out?

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I guess I'm asking if something else will kick off any writes that need to be sent out?

Yes, the docs indicate you need to call process_events() to flush outbound message buffers.

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Otherwise, LGTM

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
}
}

self.do_attempt_write_data(peer_descriptor, peer);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

If you remember about it, what the initial purpose of this "write-just-after-read-in-case-of-reply" ? Save a call to process_events to the API user?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Yea, just to be quicker about it - save an inertion into the peers_needing_send map and such. Its not all that critical unless the user only calls process_events in a loop and has some sleep we end up blocking on.

}
if except_node.is_some() && peer.their_node_id.as_ref() == except_node {
continue;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Should you include a non-replay-to-channel-update-broadcaster check as it's done for the 2 other gossips ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

There is no node_id field in a channel_update, its assumed the network graph can figure it out from the short_channel_id.

Ok(())
}

fn forward_broadcast_msg(&self, peers: &mut PeerHolder<Descriptor>, msg: &wire::Message, except_node: Option<&PublicKey>) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nit: forward_gossip_msg ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Presumably it could be used for any broadcast message? I like mentioning the word "broadcast" in it.


/// When the outbound buffer has this many messages, we'll stop reading bytes from the peer until
/// we manage to send messages until we reach this limit.
const OUTBOUND_BUFFER_LIMIT_READ_PAUSE: usize = 10;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Shouldn't this constant call OUTBOUND_BUFFER_LIMIT_SYNC_PAUSE ? Otherwise, it's a bit confusing given it's called in do_attempt_write_data

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, its used for both, not sure which is better to focus on. I could just call it like OUTBOUND_BUFFER_LOW_WATER_MARK which is pretty normal for these types of constants, and document in the doccomment what its used for?

@devrandom

Copy link
Copy Markdown
Member

tested ACK

Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMattTheBlueMatt mentioned this pull request Jun 17, 2021
We can never assume that messages were reliably delivered whether
we placed them in the socket or not, so there isn't a lot of use in
explicitly handling the case that a peer was not connected when we
went to send it a message.
Two TODOs are left for the generation of a `FundingAbandoned` (or
similar) event, though it ultimately belongs in `ChannelManager`.
`Julian Knutsen <julianknutsen@users.noreply.github.com>` pointed
out in a previous discussion that `read_event` can reenter user
code despite the documentation stating explicitly that it will not.
This was addressed in lightningdevkit#456 by simply codifying the reentrancy, but
its somewhat simpler to just drop the `do_attempt_write_data` call.
Ideally we could land most of Julian's work, but its still in need
of substantial git history cleanup to get it in a reviewable state
and this solves the immediate issue.
This will allow us to broadcast messages received in the next
commit.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased to fix a trivial conflict and squashed fixup commits.

@devrandomdevrandom left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

ACK other than nits

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@valentinewallace
valentinewallace self-requested a review June 21, 2021 17:32
Comment threadlightning/src/ln/peer_handler.rs
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Addressed comments (with fixup commits and one new commit at the head).

We do a lot of work to track which peers have buffers which need
to be flushed, when we could instead just try to flush ever peer's
buffer.
This avoids a now-unnecessary SocketDescriptor clone() call in
addition to cleaning up the callsite code somewhat.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with no changes. Changes since @devrandom's last ack are also trivial. Will merge after CI.

@TheBlueMatt
TheBlueMatt merged commit 2f6205b into lightningdevkit:mainJun 21, 2021
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

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

Clean up message forwarding and relay gossip messages - #948

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes
Jun 21, 2021
Merged

Clean up message forwarding and relay gossip messages#948
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

While we really should eventually clean up some of the big PeerHandler refactors and merge them, this fixes a bit of low-hanging fruit in the mean time, also adding forwarding of gossip messages which @devrandom wanted.

@codecov

codecovBot commented Jun 10, 2021

Copy link
Copy Markdown

Codecov Report

Merging #948 (895d1a8) into main (94528f0) will increase coverage by 0.03%.
The diff coverage is 26.27%.

Impacted file tree graph

@@ Coverage Diff @@## main #948 +/- ##
==========================================
+ Coverage 90.58% 90.62% +0.03% 
==========================================
Files 60 60 Lines 30423 30409 -14 ==========================================
- Hits 27560 27559 -1 + Misses 2863 2850 -13 
Impacted FilesCoverage Δ
lightning/src/ln/peer_handler.rs45.44% <26.27%> (+1.13%)⬆️
lightning/src/ln/functional_tests.rs97.17% <0.00%> (-0.05%)⬇️
lightning/src/ln/channelmanager.rs83.85% <0.00%> (-0.05%)⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 94528f0...895d1a8. Read the comment docs.

@devrandom

Copy link
Copy Markdown
Member

is there a quick explanation why do_attempt_write_data call was superfluous?

@devrandom

Copy link
Copy Markdown
Member

utACK

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

is there a quick explanation why do_attempt_write_data call was superfluous?

Not that its superfluous, but that it violates the stated API of read handling not generating reentrant callbacks, see eae0904.

@devrandom

Copy link
Copy Markdown
Member

I guess I'm asking if something else will kick off any writes that need to be sent out?

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I guess I'm asking if something else will kick off any writes that need to be sent out?

Yes, the docs indicate you need to call process_events() to flush outbound message buffers.

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Otherwise, LGTM

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
}
}

self.do_attempt_write_data(peer_descriptor, peer);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

If you remember about it, what the initial purpose of this "write-just-after-read-in-case-of-reply" ? Save a call to process_events to the API user?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Yea, just to be quicker about it - save an inertion into the peers_needing_send map and such. Its not all that critical unless the user only calls process_events in a loop and has some sleep we end up blocking on.

}
if except_node.is_some() && peer.their_node_id.as_ref() == except_node {
continue;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Should you include a non-replay-to-channel-update-broadcaster check as it's done for the 2 other gossips ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

There is no node_id field in a channel_update, its assumed the network graph can figure it out from the short_channel_id.

Ok(())
}

fn forward_broadcast_msg(&self, peers: &mut PeerHolder<Descriptor>, msg: &wire::Message, except_node: Option<&PublicKey>) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nit: forward_gossip_msg ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Presumably it could be used for any broadcast message? I like mentioning the word "broadcast" in it.


/// When the outbound buffer has this many messages, we'll stop reading bytes from the peer until
/// we manage to send messages until we reach this limit.
const OUTBOUND_BUFFER_LIMIT_READ_PAUSE: usize = 10;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Shouldn't this constant call OUTBOUND_BUFFER_LIMIT_SYNC_PAUSE ? Otherwise, it's a bit confusing given it's called in do_attempt_write_data

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, its used for both, not sure which is better to focus on. I could just call it like OUTBOUND_BUFFER_LOW_WATER_MARK which is pretty normal for these types of constants, and document in the doccomment what its used for?

@devrandom

Copy link
Copy Markdown
Member

tested ACK

Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMattTheBlueMatt mentioned this pull request Jun 17, 2021
We can never assume that messages were reliably delivered whether
we placed them in the socket or not, so there isn't a lot of use in
explicitly handling the case that a peer was not connected when we
went to send it a message.
Two TODOs are left for the generation of a `FundingAbandoned` (or
similar) event, though it ultimately belongs in `ChannelManager`.
`Julian Knutsen <julianknutsen@users.noreply.github.com>` pointed
out in a previous discussion that `read_event` can reenter user
code despite the documentation stating explicitly that it will not.
This was addressed in lightningdevkit#456 by simply codifying the reentrancy, but
its somewhat simpler to just drop the `do_attempt_write_data` call.
Ideally we could land most of Julian's work, but its still in need
of substantial git history cleanup to get it in a reviewable state
and this solves the immediate issue.
This will allow us to broadcast messages received in the next
commit.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased to fix a trivial conflict and squashed fixup commits.

@devrandomdevrandom left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

ACK other than nits

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@valentinewallace
valentinewallace self-requested a review June 21, 2021 17:32
Comment threadlightning/src/ln/peer_handler.rs
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Addressed comments (with fixup commits and one new commit at the head).

We do a lot of work to track which peers have buffers which need
to be flushed, when we could instead just try to flush ever peer's
buffer.
This avoids a now-unnecessary SocketDescriptor clone() call in
addition to cleaning up the callsite code somewhat.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with no changes. Changes since @devrandom's last ack are also trivial. Will merge after CI.

@TheBlueMatt
TheBlueMatt merged commit 2f6205b into lightningdevkit:mainJun 21, 2021
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

@TheBlueMatt@devrandom@valentinewallace@ariard
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Clean up message forwarding and relay gossip messages by TheBlueMatt · Pull Request #948 · lightningdevkit/rust-lightning · GitHub
Skip to content

Clean up message forwarding and relay gossip messages - #948

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes
Jun 21, 2021
Merged

Clean up message forwarding and relay gossip messages#948
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

While we really should eventually clean up some of the big PeerHandler refactors and merge them, this fixes a bit of low-hanging fruit in the mean time, also adding forwarding of gossip messages which @devrandom wanted.

@codecov

codecovBot commented Jun 10, 2021

Copy link
Copy Markdown

Codecov Report

Merging #948 (895d1a8) into main (94528f0) will increase coverage by 0.03%.
The diff coverage is 26.27%.

Impacted file tree graph

@@ Coverage Diff @@## main #948 +/- ##
==========================================
+ Coverage 90.58% 90.62% +0.03% 
==========================================
Files 60 60 Lines 30423 30409 -14 ==========================================
- Hits 27560 27559 -1 + Misses 2863 2850 -13 
Impacted FilesCoverage Δ
lightning/src/ln/peer_handler.rs45.44% <26.27%> (+1.13%)⬆️
lightning/src/ln/functional_tests.rs97.17% <0.00%> (-0.05%)⬇️
lightning/src/ln/channelmanager.rs83.85% <0.00%> (-0.05%)⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 94528f0...895d1a8. Read the comment docs.

@devrandom

Copy link
Copy Markdown
Member

is there a quick explanation why do_attempt_write_data call was superfluous?

@devrandom

Copy link
Copy Markdown
Member

utACK

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

is there a quick explanation why do_attempt_write_data call was superfluous?

Not that its superfluous, but that it violates the stated API of read handling not generating reentrant callbacks, see eae0904.

@devrandom

Copy link
Copy Markdown
Member

I guess I'm asking if something else will kick off any writes that need to be sent out?

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I guess I'm asking if something else will kick off any writes that need to be sent out?

Yes, the docs indicate you need to call process_events() to flush outbound message buffers.

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Otherwise, LGTM

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
}
}

self.do_attempt_write_data(peer_descriptor, peer);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

If you remember about it, what the initial purpose of this "write-just-after-read-in-case-of-reply" ? Save a call to process_events to the API user?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Yea, just to be quicker about it - save an inertion into the peers_needing_send map and such. Its not all that critical unless the user only calls process_events in a loop and has some sleep we end up blocking on.

}
if except_node.is_some() && peer.their_node_id.as_ref() == except_node {
continue;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Should you include a non-replay-to-channel-update-broadcaster check as it's done for the 2 other gossips ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

There is no node_id field in a channel_update, its assumed the network graph can figure it out from the short_channel_id.

Ok(())
}

fn forward_broadcast_msg(&self, peers: &mut PeerHolder<Descriptor>, msg: &wire::Message, except_node: Option<&PublicKey>) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nit: forward_gossip_msg ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Presumably it could be used for any broadcast message? I like mentioning the word "broadcast" in it.


/// When the outbound buffer has this many messages, we'll stop reading bytes from the peer until
/// we manage to send messages until we reach this limit.
const OUTBOUND_BUFFER_LIMIT_READ_PAUSE: usize = 10;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Shouldn't this constant call OUTBOUND_BUFFER_LIMIT_SYNC_PAUSE ? Otherwise, it's a bit confusing given it's called in do_attempt_write_data

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, its used for both, not sure which is better to focus on. I could just call it like OUTBOUND_BUFFER_LOW_WATER_MARK which is pretty normal for these types of constants, and document in the doccomment what its used for?

@devrandom

Copy link
Copy Markdown
Member

tested ACK

Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMattTheBlueMatt mentioned this pull request Jun 17, 2021
We can never assume that messages were reliably delivered whether
we placed them in the socket or not, so there isn't a lot of use in
explicitly handling the case that a peer was not connected when we
went to send it a message.
Two TODOs are left for the generation of a `FundingAbandoned` (or
similar) event, though it ultimately belongs in `ChannelManager`.
`Julian Knutsen <julianknutsen@users.noreply.github.com>` pointed
out in a previous discussion that `read_event` can reenter user
code despite the documentation stating explicitly that it will not.
This was addressed in lightningdevkit#456 by simply codifying the reentrancy, but
its somewhat simpler to just drop the `do_attempt_write_data` call.
Ideally we could land most of Julian's work, but its still in need
of substantial git history cleanup to get it in a reviewable state
and this solves the immediate issue.
This will allow us to broadcast messages received in the next
commit.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased to fix a trivial conflict and squashed fixup commits.

@devrandomdevrandom left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

ACK other than nits

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@valentinewallace
valentinewallace self-requested a review June 21, 2021 17:32
Comment threadlightning/src/ln/peer_handler.rs
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Addressed comments (with fixup commits and one new commit at the head).

We do a lot of work to track which peers have buffers which need
to be flushed, when we could instead just try to flush ever peer's
buffer.
This avoids a now-unnecessary SocketDescriptor clone() call in
addition to cleaning up the callsite code somewhat.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with no changes. Changes since @devrandom's last ack are also trivial. Will merge after CI.

@TheBlueMatt
TheBlueMatt merged commit 2f6205b into lightningdevkit:mainJun 21, 2021
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

@TheBlueMatt@devrandom@valentinewallace@ariard
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Clean up message forwarding and relay gossip messages by TheBlueMatt · Pull Request #948 · lightningdevkit/rust-lightning · GitHub
Skip to content

Clean up message forwarding and relay gossip messages - #948

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes
Jun 21, 2021
Merged

Clean up message forwarding and relay gossip messages#948
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

While we really should eventually clean up some of the big PeerHandler refactors and merge them, this fixes a bit of low-hanging fruit in the mean time, also adding forwarding of gossip messages which @devrandom wanted.

@codecov

codecovBot commented Jun 10, 2021

Copy link
Copy Markdown

Codecov Report

Merging #948 (895d1a8) into main (94528f0) will increase coverage by 0.03%.
The diff coverage is 26.27%.

Impacted file tree graph

@@ Coverage Diff @@## main #948 +/- ##
==========================================
+ Coverage 90.58% 90.62% +0.03% 
==========================================
Files 60 60 Lines 30423 30409 -14 ==========================================
- Hits 27560 27559 -1 + Misses 2863 2850 -13 
Impacted FilesCoverage Δ
lightning/src/ln/peer_handler.rs45.44% <26.27%> (+1.13%)⬆️
lightning/src/ln/functional_tests.rs97.17% <0.00%> (-0.05%)⬇️
lightning/src/ln/channelmanager.rs83.85% <0.00%> (-0.05%)⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 94528f0...895d1a8. Read the comment docs.

@devrandom

Copy link
Copy Markdown
Member

is there a quick explanation why do_attempt_write_data call was superfluous?

@devrandom

Copy link
Copy Markdown
Member

utACK

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

is there a quick explanation why do_attempt_write_data call was superfluous?

Not that its superfluous, but that it violates the stated API of read handling not generating reentrant callbacks, see eae0904.

@devrandom

Copy link
Copy Markdown
Member

I guess I'm asking if something else will kick off any writes that need to be sent out?

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I guess I'm asking if something else will kick off any writes that need to be sent out?

Yes, the docs indicate you need to call process_events() to flush outbound message buffers.

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Otherwise, LGTM

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
}
}

self.do_attempt_write_data(peer_descriptor, peer);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

If you remember about it, what the initial purpose of this "write-just-after-read-in-case-of-reply" ? Save a call to process_events to the API user?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Yea, just to be quicker about it - save an inertion into the peers_needing_send map and such. Its not all that critical unless the user only calls process_events in a loop and has some sleep we end up blocking on.

}
if except_node.is_some() && peer.their_node_id.as_ref() == except_node {
continue;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Should you include a non-replay-to-channel-update-broadcaster check as it's done for the 2 other gossips ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

There is no node_id field in a channel_update, its assumed the network graph can figure it out from the short_channel_id.

Ok(())
}

fn forward_broadcast_msg(&self, peers: &mut PeerHolder<Descriptor>, msg: &wire::Message, except_node: Option<&PublicKey>) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nit: forward_gossip_msg ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Presumably it could be used for any broadcast message? I like mentioning the word "broadcast" in it.


/// When the outbound buffer has this many messages, we'll stop reading bytes from the peer until
/// we manage to send messages until we reach this limit.
const OUTBOUND_BUFFER_LIMIT_READ_PAUSE: usize = 10;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Shouldn't this constant call OUTBOUND_BUFFER_LIMIT_SYNC_PAUSE ? Otherwise, it's a bit confusing given it's called in do_attempt_write_data

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, its used for both, not sure which is better to focus on. I could just call it like OUTBOUND_BUFFER_LOW_WATER_MARK which is pretty normal for these types of constants, and document in the doccomment what its used for?

@devrandom

Copy link
Copy Markdown
Member

tested ACK

Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMattTheBlueMatt mentioned this pull request Jun 17, 2021
We can never assume that messages were reliably delivered whether
we placed them in the socket or not, so there isn't a lot of use in
explicitly handling the case that a peer was not connected when we
went to send it a message.
Two TODOs are left for the generation of a `FundingAbandoned` (or
similar) event, though it ultimately belongs in `ChannelManager`.
`Julian Knutsen <julianknutsen@users.noreply.github.com>` pointed
out in a previous discussion that `read_event` can reenter user
code despite the documentation stating explicitly that it will not.
This was addressed in lightningdevkit#456 by simply codifying the reentrancy, but
its somewhat simpler to just drop the `do_attempt_write_data` call.
Ideally we could land most of Julian's work, but its still in need
of substantial git history cleanup to get it in a reviewable state
and this solves the immediate issue.
This will allow us to broadcast messages received in the next
commit.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased to fix a trivial conflict and squashed fixup commits.

@devrandomdevrandom left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

ACK other than nits

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@valentinewallace
valentinewallace self-requested a review June 21, 2021 17:32
Comment threadlightning/src/ln/peer_handler.rs
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Addressed comments (with fixup commits and one new commit at the head).

We do a lot of work to track which peers have buffers which need
to be flushed, when we could instead just try to flush ever peer's
buffer.
This avoids a now-unnecessary SocketDescriptor clone() call in
addition to cleaning up the callsite code somewhat.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with no changes. Changes since @devrandom's last ack are also trivial. Will merge after CI.

@TheBlueMatt
TheBlueMatt merged commit 2f6205b into lightningdevkit:mainJun 21, 2021
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

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

Clean up message forwarding and relay gossip messages - #948

Merged
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes
Jun 21, 2021
Merged

Clean up message forwarding and relay gossip messages#948
TheBlueMatt merged 8 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-06-p2p-fixes

Conversation

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

While we really should eventually clean up some of the big PeerHandler refactors and merge them, this fixes a bit of low-hanging fruit in the mean time, also adding forwarding of gossip messages which @devrandom wanted.

@codecov

codecovBot commented Jun 10, 2021

Copy link
Copy Markdown

Codecov Report

Merging #948 (895d1a8) into main (94528f0) will increase coverage by 0.03%.
The diff coverage is 26.27%.

Impacted file tree graph

@@ Coverage Diff @@## main #948 +/- ##
==========================================
+ Coverage 90.58% 90.62% +0.03% 
==========================================
Files 60 60 Lines 30423 30409 -14 ==========================================
- Hits 27560 27559 -1 + Misses 2863 2850 -13 
Impacted FilesCoverage Δ
lightning/src/ln/peer_handler.rs45.44% <26.27%> (+1.13%)⬆️
lightning/src/ln/functional_tests.rs97.17% <0.00%> (-0.05%)⬇️
lightning/src/ln/channelmanager.rs83.85% <0.00%> (-0.05%)⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 94528f0...895d1a8. Read the comment docs.

@devrandom

Copy link
Copy Markdown
Member

is there a quick explanation why do_attempt_write_data call was superfluous?

@devrandom

Copy link
Copy Markdown
Member

utACK

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

is there a quick explanation why do_attempt_write_data call was superfluous?

Not that its superfluous, but that it violates the stated API of read handling not generating reentrant callbacks, see eae0904.

@devrandom

Copy link
Copy Markdown
Member

I guess I'm asking if something else will kick off any writes that need to be sent out?

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

I guess I'm asking if something else will kick off any writes that need to be sent out?

Yes, the docs indicate you need to call process_events() to flush outbound message buffers.

@ariardariard left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Otherwise, LGTM

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
}
}

self.do_attempt_write_data(peer_descriptor, peer);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

If you remember about it, what the initial purpose of this "write-just-after-read-in-case-of-reply" ? Save a call to process_events to the API user?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Yea, just to be quicker about it - save an inertion into the peers_needing_send map and such. Its not all that critical unless the user only calls process_events in a loop and has some sleep we end up blocking on.

}
if except_node.is_some() && peer.their_node_id.as_ref() == except_node {
continue;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Should you include a non-replay-to-channel-update-broadcaster check as it's done for the 2 other gossips ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

There is no node_id field in a channel_update, its assumed the network graph can figure it out from the short_channel_id.

Ok(())
}

fn forward_broadcast_msg(&self, peers: &mut PeerHolder<Descriptor>, msg: &wire::Message, except_node: Option<&PublicKey>) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nit: forward_gossip_msg ?

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Presumably it could be used for any broadcast message? I like mentioning the word "broadcast" in it.


/// When the outbound buffer has this many messages, we'll stop reading bytes from the peer until
/// we manage to send messages until we reach this limit.
const OUTBOUND_BUFFER_LIMIT_READ_PAUSE: usize = 10;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Shouldn't this constant call OUTBOUND_BUFFER_LIMIT_SYNC_PAUSE ? Otherwise, it's a bit confusing given it's called in do_attempt_write_data

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Hmm, its used for both, not sure which is better to focus on. I could just call it like OUTBOUND_BUFFER_LOW_WATER_MARK which is pretty normal for these types of constants, and document in the doccomment what its used for?

@devrandom

Copy link
Copy Markdown
Member

tested ACK

Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMattTheBlueMatt mentioned this pull request Jun 17, 2021
We can never assume that messages were reliably delivered whether
we placed them in the socket or not, so there isn't a lot of use in
explicitly handling the case that a peer was not connected when we
went to send it a message.
Two TODOs are left for the generation of a `FundingAbandoned` (or
similar) event, though it ultimately belongs in `ChannelManager`.
`Julian Knutsen <julianknutsen@users.noreply.github.com>` pointed
out in a previous discussion that `read_event` can reenter user
code despite the documentation stating explicitly that it will not.
This was addressed in lightningdevkit#456 by simply codifying the reentrancy, but
its somewhat simpler to just drop the `do_attempt_write_data` call.
Ideally we could land most of Julian's work, but its still in need
of substantial git history cleanup to get it in a reviewable state
and this solves the immediate issue.
This will allow us to broadcast messages received in the next
commit.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased to fix a trivial conflict and squashed fixup commits.

@devrandomdevrandom left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

ACK other than nits

Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@valentinewallace
valentinewallace self-requested a review June 21, 2021 17:32
Comment threadlightning/src/ln/peer_handler.rs
Comment threadlightning/src/ln/peer_handler.rs Outdated
Comment threadlightning/src/ln/peer_handler.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Addressed comments (with fixup commits and one new commit at the head).

We do a lot of work to track which peers have buffers which need
to be flushed, when we could instead just try to flush ever peer's
buffer.
This avoids a now-unnecessary SocketDescriptor clone() call in
addition to cleaning up the callsite code somewhat.
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed with no changes. Changes since @devrandom's last ack are also trivial. Will merge after CI.

@TheBlueMatt
TheBlueMatt merged commit 2f6205b into lightningdevkit:mainJun 21, 2021
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

@TheBlueMatt@devrandom@valentinewallace@ariard