Get connections from Seeder when no connections left (#1742)

Co-authored-by: Constantine Bitensky <constantinebitensky@gmail.com>
This commit is contained in:
Constantine Bitensky 2021-06-08 17:42:13 +03:00 committed by GitHub
parent 3b0394eefe
commit 79c74c482b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 21 deletions

View File

@ -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()

View File

@ -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...)
})
}
}