mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-12-12 11:10:35 +00:00
network: drop requests to discovery pool when it can't be handled
It happens from time to time in a four-node private network where there are seeds (aka CNs) and not a lot of other nodes to connect to. I don't know how to test for an infinite loop that has no side-effects, so no test added here.
This commit is contained in:
parent
9d6439bbe6
commit
38d14d4e3a
1 changed files with 7 additions and 0 deletions
|
@ -225,15 +225,22 @@ func (d *DefaultDiscovery) run() {
|
|||
}
|
||||
d.lock.Unlock()
|
||||
default: // Empty pool
|
||||
var added int
|
||||
d.lock.Lock()
|
||||
for _, addr := range d.seeds {
|
||||
if !d.connectedAddrs[addr] {
|
||||
delete(d.badAddrs, addr)
|
||||
d.unconnectedAddrs[addr] = connRetries
|
||||
d.pushToPoolOrDrop(addr)
|
||||
added++
|
||||
}
|
||||
}
|
||||
d.lock.Unlock()
|
||||
// The pool is empty, but all seed nodes are already connected,
|
||||
// we can end up in an infinite loop here, so drop the request.
|
||||
if added == 0 {
|
||||
requested = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
if !ok {
|
||||
|
|
Loading…
Reference in a new issue