From a16ad72dda3e438e0b890c444b55acb2e3018527 Mon Sep 17 00:00:00 2001 From: nisdas Date: Mon, 9 Mar 2020 21:05:39 +0800 Subject: [PATCH 1/7] connect to dv5 bootnodes --- beacon-chain/p2p/service.go | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/beacon-chain/p2p/service.go b/beacon-chain/p2p/service.go index 2d268cc3a65..86a5f414d57 100644 --- a/beacon-chain/p2p/service.go +++ b/beacon-chain/p2p/service.go @@ -30,7 +30,8 @@ import ( var _ = shared.Service(&Service{}) -var pollingPeriod = 1 * time.Second +// check local table every 30 seconds for newly added peers. +var pollingPeriod = 30 * time.Second const prysmProtocolPrefix = "/prysm/0.0.0" @@ -158,7 +159,7 @@ func (s *Service) Start() { s.startupErr = err return } - err = s.addBootNodesToExclusionList() + err = s.connectToBootnodes() if err != nil { log.WithError(err).Error("Could not add bootnode to the exclusion list") s.startupErr = err @@ -293,13 +294,10 @@ func (s *Service) Peers() *peers.Status { // listen for new nodes watches for new nodes in the network and adds them to the peerstore. func (s *Service) listenForNewNodes() { - bootNode, err := enode.Parse(enode.ValidSchemes, s.cfg.Discv5BootStrapAddr[0]) - if err != nil { - log.Fatal(err) - } + nodes := make([]*enode.Node, s.cfg.MaxPeers) runutil.RunEvery(s.ctx, pollingPeriod, func() { - nodes := s.dv5Listener.Lookup(bootNode.ID()) - multiAddresses := convertToMultiAddr(nodes) + num := s.dv5Listener.ReadRandomNodes(nodes) + multiAddresses := convertToMultiAddr(nodes[:num]) s.connectWithAllPeers(multiAddresses) }) } @@ -327,24 +325,17 @@ func (s *Service) connectWithAllPeers(multiAddrs []ma.Multiaddr) { } } -func (s *Service) addBootNodesToExclusionList() error { +func (s *Service) connectToBootnodes() error { + nodes := make([]*enode.Node, 0, len(s.cfg.Discv5BootStrapAddr)) for _, addr := range s.cfg.Discv5BootStrapAddr { bootNode, err := enode.Parse(enode.ValidSchemes, addr) if err != nil { return err } - multAddr, err := convertToSingleMultiAddr(bootNode) - if err != nil { - return err - } - addrInfo, err := peer.AddrInfoFromP2pAddr(multAddr) - if err != nil { - return err - } - // bootnode is never dialled, so ttl is tentatively 1 year - s.exclusionList.Set(addrInfo.ID.String(), true, 1) + nodes = append(nodes, bootNode) } - + multiAddresses := convertToMultiAddr(nodes) + s.connectWithAllPeers(multiAddresses) return nil } From da4c2c1bd1f9f6eecc5a3199f163bfa0c16c367f Mon Sep 17 00:00:00 2001 From: nisdas Date: Mon, 9 Mar 2020 22:00:30 +0800 Subject: [PATCH 2/7] fix test --- beacon-chain/p2p/service.go | 5 ++--- beacon-chain/p2p/service_test.go | 7 +++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/beacon-chain/p2p/service.go b/beacon-chain/p2p/service.go index 86a5f414d57..683d19ef078 100644 --- a/beacon-chain/p2p/service.go +++ b/beacon-chain/p2p/service.go @@ -294,10 +294,9 @@ func (s *Service) Peers() *peers.Status { // listen for new nodes watches for new nodes in the network and adds them to the peerstore. func (s *Service) listenForNewNodes() { - nodes := make([]*enode.Node, s.cfg.MaxPeers) runutil.RunEvery(s.ctx, pollingPeriod, func() { - num := s.dv5Listener.ReadRandomNodes(nodes) - multiAddresses := convertToMultiAddr(nodes[:num]) + nodes := s.dv5Listener.LookupRandom() + multiAddresses := convertToMultiAddr(nodes) s.connectWithAllPeers(multiAddresses) }) } diff --git a/beacon-chain/p2p/service_test.go b/beacon-chain/p2p/service_test.go index c8071d3bb26..5d5e0ffd41c 100644 --- a/beacon-chain/p2p/service_test.go +++ b/beacon-chain/p2p/service_test.go @@ -130,6 +130,13 @@ func TestListenForNewNodes(t *testing.T) { bootListener := createListener(ipAddr, pkey, cfg) defer bootListener.Close() + // use shorter period for testing + currentPeriod := pollingPeriod + pollingPeriod = 2 * time.Second + defer func() { + pollingPeriod = currentPeriod + }() + bootNode := bootListener.Self() cfg = &Config{ From 488dea7711f1f909facb1ebc62f92921a17cce31 Mon Sep 17 00:00:00 2001 From: nisdas Date: Mon, 9 Mar 2020 22:14:28 +0800 Subject: [PATCH 3/7] change polling period --- beacon-chain/p2p/service.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/beacon-chain/p2p/service.go b/beacon-chain/p2p/service.go index 683d19ef078..beec94d15d6 100644 --- a/beacon-chain/p2p/service.go +++ b/beacon-chain/p2p/service.go @@ -30,8 +30,8 @@ import ( var _ = shared.Service(&Service{}) -// check local table every 30 seconds for newly added peers. -var pollingPeriod = 30 * time.Second +// check local table every 5 seconds for newly added peers. +var pollingPeriod = 5 * time.Second const prysmProtocolPrefix = "/prysm/0.0.0" From 8a1b27b81cb545a55430e7d080713db10458fb70 Mon Sep 17 00:00:00 2001 From: nisdas Date: Mon, 9 Mar 2020 22:24:09 +0800 Subject: [PATCH 4/7] ignore --- beacon-chain/p2p/service.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/beacon-chain/p2p/service.go b/beacon-chain/p2p/service.go index beec94d15d6..710851e66b7 100644 --- a/beacon-chain/p2p/service.go +++ b/beacon-chain/p2p/service.go @@ -26,6 +26,7 @@ import ( "github.com/prysmaticlabs/prysm/beacon-chain/p2p/peers" "github.com/prysmaticlabs/prysm/shared" "github.com/prysmaticlabs/prysm/shared/runutil" + "github.com/sirupsen/logrus" ) var _ = shared.Service(&Service{}) @@ -310,6 +311,11 @@ func (s *Service) connectWithAllPeers(multiAddrs []ma.Multiaddr) { for _, info := range addrInfos { // make each dial non-blocking go func(info peer.AddrInfo) { + if len(s.Peers().Active()) >= int(s.cfg.MaxPeers) { + log.WithFields(logrus.Fields{"peer": info.ID.String(), + "reason": "at peer limit"}).Trace("Not dialing peer") + return + } if info.ID == s.host.ID() { return } From 45d76a33fb90bb3c47e09e43a65a5f412556815a Mon Sep 17 00:00:00 2001 From: terence tsao Date: Mon, 9 Mar 2020 16:33:11 +0100 Subject: [PATCH 5/7] Update beacon-chain/p2p/service.go --- beacon-chain/p2p/service.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/beacon-chain/p2p/service.go b/beacon-chain/p2p/service.go index 710851e66b7..9e85c20b834 100644 --- a/beacon-chain/p2p/service.go +++ b/beacon-chain/p2p/service.go @@ -31,7 +31,7 @@ import ( var _ = shared.Service(&Service{}) -// check local table every 5 seconds for newly added peers. +// Check local table every 5 seconds for newly added peers. var pollingPeriod = 5 * time.Second const prysmProtocolPrefix = "/prysm/0.0.0" From f8b010c6202a0958173bccdad2990857f8a42c3f Mon Sep 17 00:00:00 2001 From: terence tsao Date: Mon, 9 Mar 2020 16:33:19 +0100 Subject: [PATCH 6/7] Update beacon-chain/p2p/service_test.go --- beacon-chain/p2p/service_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/beacon-chain/p2p/service_test.go b/beacon-chain/p2p/service_test.go index 5d5e0ffd41c..b34620d61e2 100644 --- a/beacon-chain/p2p/service_test.go +++ b/beacon-chain/p2p/service_test.go @@ -130,7 +130,7 @@ func TestListenForNewNodes(t *testing.T) { bootListener := createListener(ipAddr, pkey, cfg) defer bootListener.Close() - // use shorter period for testing + // Use shorter period for testing. currentPeriod := pollingPeriod pollingPeriod = 2 * time.Second defer func() { From 6de0dd1a76240a4c3016cd1ed05ebe8f1a094dd8 Mon Sep 17 00:00:00 2001 From: nisdas Date: Tue, 10 Mar 2020 10:01:56 +0800 Subject: [PATCH 7/7] fix test --- beacon-chain/p2p/discovery_test.go | 2 +- beacon-chain/p2p/service_test.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/beacon-chain/p2p/discovery_test.go b/beacon-chain/p2p/discovery_test.go index f4f5fd7be5a..7482b67b588 100644 --- a/beacon-chain/p2p/discovery_test.go +++ b/beacon-chain/p2p/discovery_test.go @@ -132,7 +132,7 @@ func TestMultiAddrConversion_OK(t *testing.T) { } func TestStaticPeering_PeersAreAdded(t *testing.T) { - cfg := &Config{Encoding: "ssz"} + cfg := &Config{Encoding: "ssz", MaxPeers: 30} port := 3000 var staticPeers []string var hosts []host.Host diff --git a/beacon-chain/p2p/service_test.go b/beacon-chain/p2p/service_test.go index 5d5e0ffd41c..77aa5ac3358 100644 --- a/beacon-chain/p2p/service_test.go +++ b/beacon-chain/p2p/service_test.go @@ -132,7 +132,7 @@ func TestListenForNewNodes(t *testing.T) { // use shorter period for testing currentPeriod := pollingPeriod - pollingPeriod = 2 * time.Second + pollingPeriod = 1 * time.Second defer func() { pollingPeriod = currentPeriod }() @@ -143,6 +143,7 @@ func TestListenForNewNodes(t *testing.T) { BootstrapNodeAddr: []string{bootNode.String()}, Discv5BootStrapAddr: []string{bootNode.String()}, Encoding: "ssz", + MaxPeers: 30, } var listeners []*discover.UDPv5 var hosts []host.Host