-
Notifications
You must be signed in to change notification settings - Fork 2.2k
multi+server.go: add initial permissions for some peers #9458
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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 (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great work ⚡️, the overall PR looks really good, was having mostly comments about naming and maybe add more unit tests.
5a7b753
to
82896f5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good from my side - pending failing lint/unit tests
15975ee
to
8edf4c2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, very nice! 🚀
|
||
return nil | ||
}, func() { | ||
clear(peerCounts) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we want to have isPermPeer = false
here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nice catch
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: there's also ConnectPeerAssertErr
which would be better here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
actually ConnectPeer
should succeed (the tcp connection will be made), but then we need to assert that we get disconnected after.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 🎉
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 |
@@ -2397,6 +2471,11 @@ func (s *server) Start() error { | |||
s.connMgr.Stop() | |||
return nil | |||
}) | |||
|
|||
// RESOLVE: s.connMgr.Start() is called here, but |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's up with this RESOLVE
prefix in the comments?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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:
protected
access.temporary
status.restricted
status.In the future, we can tune this criteria. Some of the
discovery
ban code has also been moved toserver.go
so that it is somewhat unified.