-
Notifications
You must be signed in to change notification settings - Fork 2.1k
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
multi+server.go: add initial permissions for some peers #9458
base: master
Are you sure you want to change the base?
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 Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 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.
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.
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
srvrLog.Debugf("Dropping connection for %v since they are "+ | ||
"banned.", pubSer) | ||
srvrLog.Debugf("Dropping connection for %v since we are out "+ | ||
"of restricted-access connection slots: %v.", pubSer, |
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: should be %x
srvrLog.Debugf("Dropping connection for %v since they are "+ | ||
"banned.", pubSer) | ||
srvrLog.Debugf("Dropping connection for %v since we are out "+ | ||
"of restricted-access connection slots: %v.", pubSer, |
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: should be %x
// stay temporary. | ||
peerCount, found := a.peerCounts[peerMapKey] | ||
if !found { | ||
// Error if we did not find any info in 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 guess this should never happen ?
// TestAccessManRestrictedSlots tests that the configurable number of | ||
// restricted slots are properly allocated. It also tests that certain peers | ||
// with access permissions are allowed to bypass the slot mechanism. | ||
func TestAccessManRestrictedSlots(t *testing.T) { |
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 test 🎉
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.