network: an address should either be good or bad, but not both

This commit is contained in:
Roman Khimov 2020-10-13 14:16:06 +03:00
parent c72ecd1be4
commit 8028e08abc
2 changed files with 4 additions and 2 deletions

View file

@ -115,6 +115,7 @@ func (d *DefaultDiscovery) RegisterBadAddr(addr string) {
} else { } else {
d.badAddrs[addr] = true d.badAddrs[addr] = true
delete(d.unconnectedAddrs, addr) delete(d.unconnectedAddrs, addr)
delete(d.goodAddrs, addr)
} }
d.lock.Unlock() d.lock.Unlock()
} }
@ -161,6 +162,7 @@ func (d *DefaultDiscovery) GoodPeers() []AddressWithCapabilities {
func (d *DefaultDiscovery) RegisterGoodAddr(s string, c capability.Capabilities) { func (d *DefaultDiscovery) RegisterGoodAddr(s string, c capability.Capabilities) {
d.lock.Lock() d.lock.Lock()
d.goodAddrs[s] = c d.goodAddrs[s] = c
delete(d.badAddrs, s)
d.lock.Unlock() d.lock.Unlock()
} }

View file

@ -153,14 +153,14 @@ func TestDefaultDiscoverer(t *testing.T) {
time.Sleep(time.Second) time.Sleep(time.Second)
} }
assert.Equal(t, len(set1), len(d.BadPeers())) assert.Equal(t, len(set1), len(d.BadPeers()))
assert.Equal(t, len(set1), len(d.GoodPeers())) assert.Equal(t, 0, len(d.GoodPeers()))
assert.Equal(t, 0, len(d.UnconnectedPeers())) assert.Equal(t, 0, len(d.UnconnectedPeers()))
// Re-adding bad addresses is a no-op. // Re-adding bad addresses is a no-op.
d.BackFill(set1...) d.BackFill(set1...)
assert.Equal(t, 0, len(d.UnconnectedPeers())) assert.Equal(t, 0, len(d.UnconnectedPeers()))
assert.Equal(t, len(set1), len(d.BadPeers())) assert.Equal(t, len(set1), len(d.BadPeers()))
assert.Equal(t, len(set1), len(d.GoodPeers())) assert.Equal(t, 0, len(d.GoodPeers()))
require.Equal(t, 0, d.PoolCount()) require.Equal(t, 0, d.PoolCount())
// Close should work and subsequent RequestRemote is a no-op. // Close should work and subsequent RequestRemote is a no-op.