multi+server.go: add initial permissions for some peers#9458
multi+server.go: add initial permissions for some peers#9458guggero merged 7 commits intolightningnetwork:masterfrom
Conversation
|
Important Review skippedAuto reviews are limited to specific labels. 🏷️ Labels to auto review (1)
Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
bhandras
left a comment
There was a problem hiding this comment.
First shallow pass done, great work! Concept ACK! 🎉 Going to spend some more time with the details. I think in the mean time feel free to reply to my comments with your thoughts/ideas.
77c8555 to
cbd7d60
Compare
cbd7d60 to
15e16ae
Compare
bhandras
left a comment
There was a problem hiding this comment.
Looks pretty good! Could you please add an itest covering the added functionality?
|
I tested the code in a different way and found that the demotion logic for |
72ec6df to
5a7b753
Compare
ziggie1984
left a comment
There was a problem hiding this comment.
Great work ⚡️, the overall PR looks really good, was having mostly comments about naming and maybe add more unit tests.
5a7b753 to
82896f5
Compare
ziggie1984
left a comment
There was a problem hiding this comment.
Looks good from my side - pending failing lint/unit tests
15975ee to
8edf4c2
Compare
|
|
||
| return nil | ||
| }, func() { | ||
| clear(peerCounts) |
There was a problem hiding this comment.
I think we want to have isPermPeer = false here.
There was a problem hiding this comment.
looking at it again, is this needed? isPermPeer isn't defined in the outer scope?
itest/lnd_access_perm_test.go
Outdated
| Host: alice.Cfg.P2PAddr(), | ||
| }, | ||
| } | ||
| failedPeer.RPC.ConnectPeer(req) |
There was a problem hiding this comment.
nit: there's also ConnectPeerAssertErr which would be better here.
There was a problem hiding this comment.
actually ConnectPeer should succeed (the tcp connection will be made), but then we need to assert that we get disconnected after.
bhandras
left a comment
There was a problem hiding this comment.
Seems like the itest is still failing on postgres?
dea050b to
bf4c662
Compare
|
@ziggie1984 @bhandras I believe I've addressed all the comments and fixed the flake (had to increase the min backoff) |
|
Needs a rebase! |
We introduce a new func FetchPermAndTempPeers that returns two maps. The first map indicates the nodes that will have "protected" access to the server. The second map indicates the nodes that have "temporary" access to the server. This will be used in a future commit in the server.go code.
This signal will be used in the server.go code to potentially demote temporary-access peers to restricted-access peers.
Here we introduce the access manager which has caches that will determine the access control status of our peers. Peers that have had their funding transaction confirm with us are protected. Peers that only have pending-open channels with us are temporary access and can have their access revoked. The rest of the peers are granted restricted access.
This modifies the various channelnotifier notification functions to instead hit the server and then call the notification routine. This allows us to accurately modify the server's maps.
bf4c662 to
6309b8a
Compare
|
@guggero rebased, failures unrelated afaict |
| return nil | ||
| }) | ||
|
|
||
| // RESOLVE: s.connMgr.Start() is called here, but |
There was a problem hiding this comment.
What's up with this RESOLVE prefix in the comments?
There was a problem hiding this comment.
Before this line, it is possible that we get inbound connections that queue up. It's just something that should be documented and probably a test case should be written for it. It is pre-existing and something I noticed when touching this code.
There was a problem hiding this comment.
In other words, the listener is actively listening even before s.connMgr.Start() is called
This patch adds initial access permissions in the server for some peers:
protectedaccess.temporarystatus.restrictedstatus.In the future, we can tune this criteria. Some of the
discoveryban code has also been moved toserver.goso that it is somewhat unified.