mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-07 05:46:32 +00:00
p2p: self-add node should not error (#8753)
This commit is contained in:
@@ -15,6 +15,7 @@ import (
|
||||
dbm "github.com/tendermint/tm-db"
|
||||
|
||||
tmsync "github.com/tendermint/tendermint/internal/libs/sync"
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
p2pproto "github.com/tendermint/tendermint/proto/tendermint/p2p"
|
||||
"github.com/tendermint/tendermint/types"
|
||||
)
|
||||
@@ -145,6 +146,8 @@ type PeerManagerOptions struct {
|
||||
// persistentPeers provides fast PersistentPeers lookups. It is built
|
||||
// by optimize().
|
||||
persistentPeers map[types.NodeID]bool
|
||||
|
||||
Logger log.Logger
|
||||
}
|
||||
|
||||
// Validate validates the options.
|
||||
@@ -264,6 +267,7 @@ type PeerManager struct {
|
||||
rand *rand.Rand
|
||||
dialWaker *tmsync.Waker // wakes up DialNext() on relevant peer changes
|
||||
evictWaker *tmsync.Waker // wakes up EvictNext() on relevant peer changes
|
||||
logger log.Logger
|
||||
|
||||
mtx sync.Mutex
|
||||
store *peerStore
|
||||
@@ -298,6 +302,7 @@ func NewPeerManager(selfID types.NodeID, peerDB dbm.DB, options PeerManagerOptio
|
||||
rand: rand.New(rand.NewSource(time.Now().UnixNano())), // nolint:gosec
|
||||
dialWaker: tmsync.NewWaker(),
|
||||
evictWaker: tmsync.NewWaker(),
|
||||
logger: log.NewNopLogger(),
|
||||
|
||||
store: store,
|
||||
dialing: map[types.NodeID]bool{},
|
||||
@@ -308,6 +313,11 @@ func NewPeerManager(selfID types.NodeID, peerDB dbm.DB, options PeerManagerOptio
|
||||
evicting: map[types.NodeID]bool{},
|
||||
subscriptions: map[*PeerUpdates]*PeerUpdates{},
|
||||
}
|
||||
|
||||
if options.Logger != nil {
|
||||
peerManager.logger = options.Logger
|
||||
}
|
||||
|
||||
if err = peerManager.configurePeers(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -390,7 +400,7 @@ func (m *PeerManager) Add(address NodeAddress) (bool, error) {
|
||||
return false, err
|
||||
}
|
||||
if address.NodeID == m.selfID {
|
||||
return false, fmt.Errorf("can't add self (%v) to peer store", m.selfID)
|
||||
return false, nil
|
||||
}
|
||||
|
||||
m.mtx.Lock()
|
||||
|
||||
@@ -265,8 +265,9 @@ func TestPeerManager_Add(t *testing.T) {
|
||||
require.Error(t, err)
|
||||
|
||||
// Adding self should error
|
||||
_, err = peerManager.Add(p2p.NodeAddress{Protocol: "memory", NodeID: selfID})
|
||||
require.Error(t, err)
|
||||
ok, err := peerManager.Add(p2p.NodeAddress{Protocol: "memory", NodeID: selfID})
|
||||
require.False(t, ok)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestPeerManager_DialNext(t *testing.T) {
|
||||
@@ -841,13 +842,14 @@ func TestPeerManager_Dialed_Connected(t *testing.T) {
|
||||
require.Error(t, peerManager.Dialed(b))
|
||||
}
|
||||
|
||||
func TestPeerManager_Dialed_Self(t *testing.T) {
|
||||
func TestPeerManager_Adding_Self(t *testing.T) {
|
||||
peerManager, err := p2p.NewPeerManager(selfID, dbm.NewMemDB(), p2p.PeerManagerOptions{})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Dialing self should error.
|
||||
_, err = peerManager.Add(p2p.NodeAddress{Protocol: "memory", NodeID: selfID})
|
||||
require.Error(t, err)
|
||||
// Ingesting self should not error.
|
||||
ok, err := peerManager.Add(p2p.NodeAddress{Protocol: "memory", NodeID: selfID})
|
||||
require.False(t, ok)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestPeerManager_Dialed_MaxConnected(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user