zcash: adjust crawler timeouts for non-local peers

This commit is contained in:
George Tankersley 2020-05-21 17:25:01 -04:00
parent 77728106cd
commit 289e839360
1 changed files with 18 additions and 9 deletions

View File

@ -34,11 +34,19 @@ var defaultPeerConfig = &peer.Config{
ProtocolVersion: 170009, // Blossom ProtocolVersion: 170009, // Blossom
} }
// The minimum number of addresses we need to know about to begin serving introductions. const (
const minimumReadyAddresses = 10 // The minimum number of addresses we need to know about to begin serving introductions
minimumReadyAddresses = 10
// The maximum amount of time we will wait for a peer to complete the initial handshake. // The maximum amount of time we will wait for a peer to complete the initial handshake
const maximumHandshakeWait = 1 * time.Second maximumHandshakeWait = 1 * time.Second
// The timeout for the underlying dial to a peer
connectionDialTimeout = 1 * time.Second
// The amount of time crawler goroutines will wait for incoming addresses after a RequestAddresses()
crawlerThreadTimeout = 30 * time.Second
)
// Seeder contains all of the state and configuration needed to request addresses from Zcash peers and present them to a DNS provider. // Seeder contains all of the state and configuration needed to request addresses from Zcash peers and present them to a DNS provider.
type Seeder struct { type Seeder struct {
@ -74,7 +82,7 @@ func NewSeeder(network network.Network) (*Seeder, error) {
pendingPeers: NewPeerMap(), pendingPeers: NewPeerMap(),
livePeers: NewPeerMap(), livePeers: NewPeerMap(),
addrBook: NewAddressBook(), addrBook: NewAddressBook(),
addrQueue: make(chan *wire.NetAddress), addrQueue: make(chan *wire.NetAddress, 100),
} }
newSeeder.config.Listeners.OnVerAck = newSeeder.onVerAck newSeeder.config.Listeners.OnVerAck = newSeeder.onVerAck
@ -103,7 +111,7 @@ func newTestSeeder(network network.Network) (*Seeder, error) {
pendingPeers: NewPeerMap(), pendingPeers: NewPeerMap(),
livePeers: NewPeerMap(), livePeers: NewPeerMap(),
addrBook: NewAddressBook(), addrBook: NewAddressBook(),
addrQueue: make(chan *wire.NetAddress), addrQueue: make(chan *wire.NetAddress, 100),
} }
newSeeder.config.Listeners.OnVerAck = newSeeder.onVerAck newSeeder.config.Listeners.OnVerAck = newSeeder.onVerAck
@ -177,7 +185,7 @@ func (s *Seeder) Connect(addr, port string) error {
return ErrRepeatConnection return ErrRepeatConnection
} }
conn, err := net.DialTimeout("tcp", p.Addr(), 1*time.Second) conn, err := net.DialTimeout("tcp", p.Addr(), connectionDialTimeout)
if err != nil { if err != nil {
return errors.Wrap(err, "dialing new peer address") return errors.Wrap(err, "dialing new peer address")
} }
@ -282,7 +290,7 @@ func (s *Seeder) RequestAddresses() {
// GetAddr messages to briefly live trial connections without meaning to. It's // GetAddr messages to briefly live trial connections without meaning to. It's
// meant to be run on a timer that takes longer to fire than it takes to check addresses. // meant to be run on a timer that takes longer to fire than it takes to check addresses.
for i := 0; i < runtime.NumCPU()*2; i++ { for i := 0; i < runtime.NumCPU()*4; i++ {
go func() { go func() {
var na *wire.NetAddress var na *wire.NetAddress
for { for {
@ -290,8 +298,9 @@ func (s *Seeder) RequestAddresses() {
case next := <-s.addrQueue: case next := <-s.addrQueue:
// Pull the next address off the queue // Pull the next address off the queue
na = next na = next
case <-time.After(1 * time.Second): case <-time.After(crawlerThreadTimeout):
// Or die if there wasn't one // Or die if there wasn't one
s.logger.Printf("Crawler thread timeout")
return return
} }