From 79c74c482becd72cf97d5ceb8e333474c200cb28 Mon Sep 17 00:00:00 2001 From: Constantine Bitensky <85228836+constantineatdaglabs@users.noreply.github.com> Date: Tue, 8 Jun 2021 17:42:13 +0300 Subject: [PATCH] Get connections from Seeder when no connections left (#1742) Co-authored-by: Constantine Bitensky --- app/component_manager.go | 21 ---------------- .../network/connmanager/connmanager.go | 24 +++++++++++++++++++ 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/app/component_manager.go b/app/component_manager.go index 7e2d09de5..7cce2f2d2 100644 --- a/app/component_manager.go +++ b/app/component_manager.go @@ -4,7 +4,6 @@ import ( "fmt" "sync/atomic" - "github.com/kaspanet/kaspad/app/appmessage" "github.com/kaspanet/kaspad/app/protocol" "github.com/kaspanet/kaspad/app/rpc" "github.com/kaspanet/kaspad/domain" @@ -14,7 +13,6 @@ import ( infrastructuredatabase "github.com/kaspanet/kaspad/infrastructure/db/database" "github.com/kaspanet/kaspad/infrastructure/network/addressmanager" "github.com/kaspanet/kaspad/infrastructure/network/connmanager" - "github.com/kaspanet/kaspad/infrastructure/network/dnsseed" "github.com/kaspanet/kaspad/infrastructure/network/netadapter" "github.com/kaspanet/kaspad/infrastructure/network/netadapter/id" "github.com/kaspanet/kaspad/util/panics" @@ -46,8 +44,6 @@ func (a *ComponentManager) Start() { panics.Exit(log, fmt.Sprintf("Error starting the net adapter: %+v", err)) } - a.maybeSeedFromDNS() - a.connectionManager.Start() } @@ -157,23 +153,6 @@ func setupRPC( return rpcManager } -func (a *ComponentManager) maybeSeedFromDNS() { - if !a.cfg.DisableDNSSeed { - dnsseed.SeedFromDNS(a.cfg.NetParams(), a.cfg.DNSSeed, false, nil, - a.cfg.Lookup, func(addresses []*appmessage.NetAddress) { - // Kaspad uses a lookup of the dns seeder here. Since seeder returns - // IPs of nodes and not its own IP, we can not know real IP of - // source. So we'll take first returned address as source. - a.addressManager.AddAddresses(addresses...) - }) - - dnsseed.SeedFromGRPC(a.cfg.NetParams(), a.cfg.GRPCSeed, false, nil, - func(addresses []*appmessage.NetAddress) { - a.addressManager.AddAddresses(addresses...) - }) - } -} - // P2PNodeID returns the network ID associated with this ComponentManager func (a *ComponentManager) P2PNodeID() *id.ID { return a.netAdapter.ID() diff --git a/infrastructure/network/connmanager/connmanager.go b/infrastructure/network/connmanager/connmanager.go index ab68e48c6..31b91069f 100644 --- a/infrastructure/network/connmanager/connmanager.go +++ b/infrastructure/network/connmanager/connmanager.go @@ -2,6 +2,7 @@ package connmanager import ( "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/infrastructure/network/dnsseed" "github.com/pkg/errors" "net" "sync" @@ -104,6 +105,7 @@ func (c *ConnectionManager) initiateConnection(address string) error { const connectionsLoopInterval = 30 * time.Second func (c *ConnectionManager) connectionsLoop() { + for atomic.LoadUint32(&c.stop) == 0 { connections := c.netAdapter.P2PConnections() @@ -119,6 +121,8 @@ func (c *ConnectionManager) connectionsLoop() { c.checkIncomingConnections(connSet) + c.seedFromDNS() + c.waitTillNextIteration() } } @@ -247,3 +251,23 @@ func (c *ConnectionManager) extractAddressIPs(address string) ([]net.IP, error) return []net.IP{ip}, nil } + +func (c *ConnectionManager) seedFromDNS() { + cfg := c.cfg + if len(c.activeOutgoing) == 0 && !cfg.DisableDNSSeed { + log.Infof("No ongoing connections, trying to get new addresses from seed...") + + dnsseed.SeedFromDNS(cfg.NetParams(), cfg.DNSSeed, false, nil, + cfg.Lookup, func(addresses []*appmessage.NetAddress) { + // Kaspad uses a lookup of the dns seeder here. Since seeder returns + // IPs of nodes and not its own IP, we can not know real IP of + // source. So we'll take first returned address as source. + _ = c.addressManager.AddAddresses(addresses...) + }) + + dnsseed.SeedFromGRPC(cfg.NetParams(), cfg.GRPCSeed, false, nil, + func(addresses []*appmessage.NetAddress) { + _ = c.addressManager.AddAddresses(addresses...) + }) + } +}