Skip to content
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

Replace PeerListAck with GetPeerList #2580

Merged
merged 100 commits into from
Jan 14, 2024
Merged
Show file tree
Hide file tree
Changes from 83 commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
c2154c4
Remove PeerListAck support
StephenButtolph Jan 2, 2024
093498c
Enable parsing of bloom filters
StephenButtolph Jan 2, 2024
e6785bc
Remove peerlist tracking from the network
StephenButtolph Jan 2, 2024
64a54b2
Implement validator tracker
StephenButtolph Jan 2, 2024
8d9371f
Remove gossip tracker
StephenButtolph Jan 2, 2024
eb0b771
Add BloomFilter support in the Handshake message
StephenButtolph Jan 2, 2024
db7f595
Remove TxID from claimed IP address
StephenButtolph Jan 2, 2024
8d2b459
Optimize bloom filter
StephenButtolph Jan 4, 2024
1a845f0
remove murmur
StephenButtolph Jan 4, 2024
d94b846
Update serialization logic and invert probability calculations
StephenButtolph Jan 5, 2024
de764ef
special cases
StephenButtolph Jan 5, 2024
83cbe38
test
StephenButtolph Jan 5, 2024
1d0b0a3
add fuzzing
StephenButtolph Jan 5, 2024
e1b9490
Prevent undefined behavior
StephenButtolph Jan 5, 2024
2ef237e
nits
StephenButtolph Jan 5, 2024
ef2cb2b
nit
StephenButtolph Jan 5, 2024
97e4958
nit
StephenButtolph Jan 5, 2024
5ab52b0
cleanup edge case handling
StephenButtolph Jan 5, 2024
7104b09
add comment
StephenButtolph Jan 5, 2024
7ac29af
nit
StephenButtolph Jan 5, 2024
6eaf8d9
Remove test flaking on platform specific results from math.Log
StephenButtolph Jan 5, 2024
5369c92
Merge branch 'dev' into optimize-bloom-filter
StephenButtolph Jan 5, 2024
7d87eb5
merged
StephenButtolph Jan 5, 2024
98d1424
Add local bloom filter
StephenButtolph Jan 5, 2024
4f6aea3
periodically reset the bloom filter
StephenButtolph Jan 5, 2024
e888a3b
add TODO
StephenButtolph Jan 5, 2024
fa3d0a3
Remove peerID from Track
StephenButtolph Jan 5, 2024
9a7bece
Add GetPeerList message
StephenButtolph Jan 5, 2024
a7d56c2
Add bloom filter to version message
StephenButtolph Jan 5, 2024
75a7cb5
periodically send getPeerList requests
StephenButtolph Jan 6, 2024
0463e98
Add new configs
StephenButtolph Jan 6, 2024
fac4698
fixes
StephenButtolph Jan 6, 2024
56e7df4
nit
StephenButtolph Jan 6, 2024
d08dda9
wip
StephenButtolph Jan 8, 2024
17adfbd
typo
StephenButtolph Jan 8, 2024
3f5c203
Merge branch 'dev' into optimize-bloom-filter
StephenButtolph Jan 8, 2024
8058987
typo
StephenButtolph Jan 8, 2024
60ce520
Merge branch 'optimize-bloom-filter' of github.com:ava-labs/avalanche…
StephenButtolph Jan 8, 2024
41c5297
nits
StephenButtolph Jan 8, 2024
91942a7
Merge branch 'optimize-bloom-filter' into ip-pull-gossip
StephenButtolph Jan 8, 2024
2312f00
update manual tracking
StephenButtolph Jan 8, 2024
b1045d9
validator tracker -> ip tracker
StephenButtolph Jan 8, 2024
d82f00a
resolve TODO + minimize gossipID
StephenButtolph Jan 8, 2024
1cf3c0b
cleanup ip tracker
StephenButtolph Jan 8, 2024
bb697e3
merged
StephenButtolph Jan 8, 2024
46a68b2
nits
StephenButtolph Jan 8, 2024
e3b1161
nits
StephenButtolph Jan 8, 2024
a75b119
add manually track tests
StephenButtolph Jan 9, 2024
5b008b7
Add AddIP tests
StephenButtolph Jan 9, 2024
4d0570f
Add more ip tracker tests
StephenButtolph Jan 9, 2024
b5d7c80
Remove TLS key gen from networking tests
StephenButtolph Jan 9, 2024
9b849cd
Merge branch 'remove-test-tls-key-gen' into ip-pull-gossip
StephenButtolph Jan 9, 2024
d9e17b5
Remove TLS key gen from new tests
StephenButtolph Jan 9, 2024
9591672
reduce diff
StephenButtolph Jan 9, 2024
2af9913
nit
StephenButtolph Jan 9, 2024
991f81f
Merge branch 'remove-test-tls-key-gen' into ip-pull-gossip
StephenButtolph Jan 9, 2024
c3f2c0e
add getPeerList tests
StephenButtolph Jan 9, 2024
f9c5a50
rename
StephenButtolph Jan 9, 2024
cdd936a
nit
StephenButtolph Jan 9, 2024
0665d60
nit
StephenButtolph Jan 9, 2024
ac48e3b
reduce diff
StephenButtolph Jan 9, 2024
5fbe20b
remove useless disconnected calls
StephenButtolph Jan 9, 2024
80b2d1d
nit
StephenButtolph Jan 9, 2024
e726f99
nit
StephenButtolph Jan 9, 2024
e89aa59
nit
StephenButtolph Jan 9, 2024
b4d1351
address nits
StephenButtolph Jan 9, 2024
5d0b1ad
remove dead code
StephenButtolph Jan 9, 2024
ee7d340
Merge branch 'dev' into ip-pull-gossip
StephenButtolph Jan 9, 2024
84af051
Merge branch 'dev' into ip-pull-gossip
StephenButtolph Jan 9, 2024
3b42d0e
Merge branch 'dev' into ip-pull-gossip
StephenButtolph Jan 9, 2024
008b71d
wip readme
StephenButtolph Jan 9, 2024
04624a5
wip readme
StephenButtolph Jan 9, 2024
29c3c15
wip readme
StephenButtolph Jan 9, 2024
d94927a
wip readme
StephenButtolph Jan 9, 2024
79f89be
wip readme
StephenButtolph Jan 9, 2024
bd9be3f
wip readme
StephenButtolph Jan 9, 2024
901ea16
wip readme
StephenButtolph Jan 9, 2024
e6b3ea1
wip readme
StephenButtolph Jan 9, 2024
ddfc174
wip readme
StephenButtolph Jan 9, 2024
fa34839
wip readme
StephenButtolph Jan 9, 2024
2e7678f
wip readme
StephenButtolph Jan 9, 2024
7a379c6
wip readme
StephenButtolph Jan 9, 2024
ed37d85
nit remove multiple init functions
StephenButtolph Jan 9, 2024
39119f6
nit
StephenButtolph Jan 10, 2024
6b367af
add more comments
StephenButtolph Jan 10, 2024
fdc9af3
ok
StephenButtolph Jan 10, 2024
6f92e95
Merge branch 'dev' into ip-pull-gossip
StephenButtolph Jan 11, 2024
fb9fd84
Add logs and checks
StephenButtolph Jan 11, 2024
5a51f7b
Merge branch 'dev' into dynamic-staking-port-fix
StephenButtolph Jan 11, 2024
35ae4f1
nit comment
StephenButtolph Jan 11, 2024
3661156
move nat traversal into the node
StephenButtolph Jan 12, 2024
a05c340
test nit
StephenButtolph Jan 12, 2024
194dee8
fix CI
StephenButtolph Jan 12, 2024
4844189
Merge branch 'dev' into dynamic-staking-port-fix
StephenButtolph Jan 12, 2024
ee9486c
nit
StephenButtolph Jan 13, 2024
37bcb38
Merge branch 'dynamic-staking-port-fix' of github.com:ava-labs/avalan…
StephenButtolph Jan 13, 2024
2b3aca3
Merge branch 'dynamic-staking-port-fix' into ip-pull-gossip
StephenButtolph Jan 13, 2024
e2097d7
merged
StephenButtolph Jan 14, 2024
40f6d11
typo
StephenButtolph Jan 14, 2024
229666b
cleanup proto reservations
StephenButtolph Jan 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 6 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,8 @@ func getNetworkConfig(
PeerListNonValidatorGossipSize: v.GetUint32(NetworkPeerListNonValidatorGossipSizeKey),
PeerListPeersGossipSize: v.GetUint32(NetworkPeerListPeersGossipSizeKey),
PeerListGossipFreq: v.GetDuration(NetworkPeerListGossipFreqKey),
PeerListPullGossipFreq: v.GetDuration(NetworkPeerListPullGossipFreqKey),
PeerListBloomResetFreq: v.GetDuration(NetworkPeerListBloomResetFreqKey),
},

DelayConfig: network.DelayConfig{
Expand Down Expand Up @@ -466,6 +468,10 @@ func getNetworkConfig(
return network.Config{}, fmt.Errorf("%q must be >= 0", NetworkOutboundConnectionTimeoutKey)
case config.PeerListGossipFreq < 0:
return network.Config{}, fmt.Errorf("%s must be >= 0", NetworkPeerListGossipFreqKey)
case config.PeerListPullGossipFreq < 0:
return network.Config{}, fmt.Errorf("%s must be >= 0", NetworkPeerListPullGossipFreqKey)
case config.PeerListBloomResetFreq < 0:
return network.Config{}, fmt.Errorf("%s must be >= 0", NetworkPeerListBloomResetFreqKey)
case config.ThrottlerConfig.InboundMsgThrottlerConfig.CPUThrottlerConfig.MaxRecheckDelay < constants.MinInboundThrottlerMaxRecheckDelay:
return network.Config{}, fmt.Errorf("%s must be >= %d", InboundThrottlerCPUMaxRecheckDelayKey, constants.MinInboundThrottlerMaxRecheckDelay)
case config.ThrottlerConfig.InboundMsgThrottlerConfig.DiskThrottlerConfig.MaxRecheckDelay < constants.MinInboundThrottlerMaxRecheckDelay:
Expand Down
2 changes: 2 additions & 0 deletions config/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ func addNodeFlags(fs *pflag.FlagSet) {
fs.Uint(NetworkPeerListNonValidatorGossipSizeKey, constants.DefaultNetworkPeerListNonValidatorGossipSize, "Number of non-validators that the node will gossip peer list to")
fs.Uint(NetworkPeerListPeersGossipSizeKey, constants.DefaultNetworkPeerListPeersGossipSize, "Number of total peers (including non-validators and validators) that the node will gossip peer list to")
fs.Duration(NetworkPeerListGossipFreqKey, constants.DefaultNetworkPeerListGossipFreq, "Frequency to gossip peers to other nodes")
fs.Duration(NetworkPeerListPullGossipFreqKey, constants.DefaultNetworkPeerListPullGossipFreq, "Frequency to request peers from other nodes")
fs.Duration(NetworkPeerListBloomResetFreqKey, constants.DefaultNetworkPeerListBloomResetFreq, "Frequency to recalculate the bloom filter used to request new peers from other nodes")

// Public IP Resolution
fs.String(PublicIPKey, "", "Public IP of this node for P2P communication. If empty, try to discover with NAT")
Expand Down
2 changes: 2 additions & 0 deletions config/keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ const (
NetworkPeerListNonValidatorGossipSizeKey = "network-peer-list-non-validator-gossip-size"
NetworkPeerListPeersGossipSizeKey = "network-peer-list-peers-gossip-size"
NetworkPeerListGossipFreqKey = "network-peer-list-gossip-frequency"
NetworkPeerListPullGossipFreqKey = "network-peer-list-pull-gossip-frequency"
NetworkPeerListBloomResetFreqKey = "network-peer-list-bloom-reset-frequency"
NetworkInitialReconnectDelayKey = "network-initial-reconnect-delay"
NetworkReadHandshakeTimeoutKey = "network-read-handshake-timeout"
NetworkPingTimeoutKey = "network-ping-timeout"
Expand Down
9 changes: 7 additions & 2 deletions genesis/bootstrappers.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,15 @@ type Bootstrapper struct {
IP ips.IPDesc `json:"ip"`
}

// GetBootstrappers returns all default bootstrappers for the provided network.
func GetBootstrappers(networkID uint32) []Bootstrapper {
networkName := constants.NetworkIDToNetworkName[networkID]
return bootstrappersPerNetwork[networkName]
}

// SampleBootstrappers returns the some beacons this node should connect to
func SampleBootstrappers(networkID uint32, count int) []Bootstrapper {
networkName := constants.NetworkIDToNetworkName[networkID]
bootstrappers := bootstrappersPerNetwork[networkName]
bootstrappers := GetBootstrappers(networkID)
count = math.Min(count, len(bootstrappers))

s := sampler.NewUniform()
Expand Down
87 changes: 60 additions & 27 deletions message/messages_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,12 +142,63 @@ func TestMessage(t *testing.T) {
bypassThrottling: true,
bytesSaved: false,
},
{
desc: "get_peer_list message with no compression",
op: GetPeerListOp,
msg: &p2p.Message{
Message: &p2p.Message_GetPeerList{
GetPeerList: &p2p.GetPeerList{
KnownPeers: &p2p.BloomFilter{
Filter: make([]byte, 2048),
Salt: make([]byte, 32),
},
},
},
},
compressionType: compression.TypeNone,
bypassThrottling: false,
bytesSaved: false,
},
{
desc: "get_peer_list message with gzip compression",
op: GetPeerListOp,
msg: &p2p.Message{
Message: &p2p.Message_GetPeerList{
GetPeerList: &p2p.GetPeerList{
KnownPeers: &p2p.BloomFilter{
Filter: make([]byte, 2048),
Salt: make([]byte, 32),
},
},
},
},
compressionType: compression.TypeGzip,
bypassThrottling: false,
bytesSaved: true,
},
{
desc: "get_peer_list message with zstd compression",
op: GetPeerListOp,
msg: &p2p.Message{
Message: &p2p.Message_GetPeerList{
GetPeerList: &p2p.GetPeerList{
KnownPeers: &p2p.BloomFilter{
Filter: make([]byte, 2048),
Salt: make([]byte, 32),
},
},
},
},
compressionType: compression.TypeZstd,
bypassThrottling: false,
bytesSaved: true,
},
{
desc: "peer_list message with no compression",
op: PeerListOp,
msg: &p2p.Message{
Message: &p2p.Message_PeerList{
PeerList: &p2p.PeerList{
Message: &p2p.Message_PeerList_{
PeerList_: &p2p.PeerList{
ClaimedIpPorts: []*p2p.ClaimedIpPort{
{
X509Certificate: testTLSCert.Certificate[0],
Expand All @@ -168,8 +219,8 @@ func TestMessage(t *testing.T) {
desc: "peer_list message with gzip compression",
op: PeerListOp,
msg: &p2p.Message{
Message: &p2p.Message_PeerList{
PeerList: &p2p.PeerList{
Message: &p2p.Message_PeerList_{
PeerList_: &p2p.PeerList{
ClaimedIpPorts: []*p2p.ClaimedIpPort{
{
X509Certificate: testTLSCert.Certificate[0],
Expand All @@ -190,8 +241,8 @@ func TestMessage(t *testing.T) {
desc: "peer_list message with zstd compression",
op: PeerListOp,
msg: &p2p.Message{
Message: &p2p.Message_PeerList{
PeerList: &p2p.PeerList{
Message: &p2p.Message_PeerList_{
PeerList_: &p2p.PeerList{
ClaimedIpPorts: []*p2p.ClaimedIpPort{
{
X509Certificate: testTLSCert.Certificate[0],
Expand All @@ -208,25 +259,6 @@ func TestMessage(t *testing.T) {
bypassThrottling: true,
bytesSaved: true,
},
{
desc: "peer_list_ack message with no compression",
op: PeerListAckOp,
msg: &p2p.Message{
Message: &p2p.Message_PeerListAck{
PeerListAck: &p2p.PeerListAck{
PeerAcks: []*p2p.PeerAck{
{
TxId: testID[:],
Timestamp: 1,
},
},
},
},
},
compressionType: compression.TypeNone,
bypassThrottling: false,
bytesSaved: false,
},
{
desc: "get_state_summary_frontier message with no compression",
op: GetStateSummaryFrontierOp,
Expand Down Expand Up @@ -836,8 +868,9 @@ func TestMessage(t *testing.T) {
require.Equal(tv.bypassThrottling, encodedMsg.BypassThrottling())
require.Equal(tv.op, encodedMsg.Op())

bytesSaved := encodedMsg.BytesSavedCompression()
require.Equal(tv.bytesSaved, bytesSaved > 0)
if bytesSaved := encodedMsg.BytesSavedCompression(); tv.bytesSaved {
require.Greater(bytesSaved, 0)
}

parsedMsg, err := mb.parseInbound(encodedMsg.Bytes(), ids.EmptyNodeID, func() {})
require.NoError(err)
Expand Down
40 changes: 20 additions & 20 deletions message/mock_outbound_message_builder.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 11 additions & 11 deletions message/ops.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ const (
PingOp Op = iota
PongOp
HandshakeOp
GetPeerListOp
StephenButtolph marked this conversation as resolved.
Show resolved Hide resolved
PeerListOp
PeerListAckOp
// State sync:
GetStateSummaryFrontierOp
GetStateSummaryFrontierFailedOp
Expand Down Expand Up @@ -72,8 +72,8 @@ var (
PingOp,
PongOp,
HandshakeOp,
GetPeerListOp,
PeerListOp,
PeerListAckOp,
}

// List of all consensus request message types
Expand Down Expand Up @@ -211,10 +211,10 @@ func (op Op) String() string {
return "pong"
case HandshakeOp:
return "handshake"
case GetPeerListOp:
return "get_peerlist"
case PeerListOp:
return "peerlist"
case PeerListAckOp:
return "peerlist_ack"
// State sync
case GetStateSummaryFrontierOp:
return "get_state_summary_frontier"
Expand Down Expand Up @@ -305,10 +305,10 @@ func Unwrap(m *p2p.Message) (fmt.Stringer, error) {
return msg.Pong, nil
case *p2p.Message_Handshake:
return msg.Handshake, nil
case *p2p.Message_PeerList:
return msg.PeerList, nil
case *p2p.Message_PeerListAck:
return msg.PeerListAck, nil
case *p2p.Message_GetPeerList:
return msg.GetPeerList, nil
case *p2p.Message_PeerList_:
return msg.PeerList_, nil
// State sync:
case *p2p.Message_GetStateSummaryFrontier:
return msg.GetStateSummaryFrontier, nil
Expand Down Expand Up @@ -364,10 +364,10 @@ func ToOp(m *p2p.Message) (Op, error) {
return PongOp, nil
case *p2p.Message_Handshake:
return HandshakeOp, nil
case *p2p.Message_PeerList:
case *p2p.Message_GetPeerList:
return GetPeerListOp, nil
case *p2p.Message_PeerList_:
return PeerListOp, nil
case *p2p.Message_PeerListAck:
return PeerListAckOp, nil
case *p2p.Message_GetStateSummaryFrontier:
return GetStateSummaryFrontierOp, nil
case *p2p.Message_StateSummaryFrontier_:
Expand Down