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" "fmt"
"sync/atomic" "sync/atomic"
"github.com/kaspanet/kaspad/app/appmessage"
"github.com/kaspanet/kaspad/app/protocol" "github.com/kaspanet/kaspad/app/protocol"
"github.com/kaspanet/kaspad/app/rpc" "github.com/kaspanet/kaspad/app/rpc"
"github.com/kaspanet/kaspad/domain" "github.com/kaspanet/kaspad/domain"
@ -14,7 +13,6 @@ import (
infrastructuredatabase "github.com/kaspanet/kaspad/infrastructure/db/database" infrastructuredatabase "github.com/kaspanet/kaspad/infrastructure/db/database"
"github.com/kaspanet/kaspad/infrastructure/network/addressmanager" "github.com/kaspanet/kaspad/infrastructure/network/addressmanager"
"github.com/kaspanet/kaspad/infrastructure/network/connmanager" "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"
"github.com/kaspanet/kaspad/infrastructure/network/netadapter/id" "github.com/kaspanet/kaspad/infrastructure/network/netadapter/id"
"github.com/kaspanet/kaspad/util/panics" "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)) panics.Exit(log, fmt.Sprintf("Error starting the net adapter: %+v", err))
} }
a.maybeSeedFromDNS()
a.connectionManager.Start() a.connectionManager.Start()
} }
@ -157,23 +153,6 @@ func setupRPC(
return rpcManager 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 // P2PNodeID returns the network ID associated with this ComponentManager
func (a *ComponentManager) P2PNodeID() *id.ID { func (a *ComponentManager) P2PNodeID() *id.ID {
return a.netAdapter.ID() return a.netAdapter.ID()

View File

@ -2,6 +2,7 @@ package connmanager
import ( import (
"github.com/kaspanet/kaspad/app/appmessage" "github.com/kaspanet/kaspad/app/appmessage"
"github.com/kaspanet/kaspad/infrastructure/network/dnsseed"
"github.com/pkg/errors" "github.com/pkg/errors"
"net" "net"
"sync" "sync"
@ -104,6 +105,7 @@ func (c *ConnectionManager) initiateConnection(address string) error {
const connectionsLoopInterval = 30 * time.Second const connectionsLoopInterval = 30 * time.Second
func (c *ConnectionManager) connectionsLoop() { func (c *ConnectionManager) connectionsLoop() {
for atomic.LoadUint32(&c.stop) == 0 { for atomic.LoadUint32(&c.stop) == 0 {
connections := c.netAdapter.P2PConnections() connections := c.netAdapter.P2PConnections()
@ -119,6 +121,8 @@ func (c *ConnectionManager) connectionsLoop() {
c.checkIncomingConnections(connSet) c.checkIncomingConnections(connSet)
c.seedFromDNS()
c.waitTillNextIteration() c.waitTillNextIteration()
} }
} }
@ -247,3 +251,23 @@ func (c *ConnectionManager) extractAddressIPs(address string) ([]net.IP, error)
return []net.IP{ip}, nil 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...)
})
}
}