diff --git a/internal/p2p/peermanager.go b/internal/p2p/peermanager.go index 5c3f1c911..0d94effec 100644 --- a/internal/p2p/peermanager.go +++ b/internal/p2p/peermanager.go @@ -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" ) @@ -148,6 +149,8 @@ type PeerManagerOptions struct { // Peer Metrics Metrics *Metrics + // Logger + Logger log.Logger } // Validate validates the options. @@ -268,6 +271,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 @@ -297,12 +301,14 @@ func NewPeerManager(selfID types.NodeID, peerDB dbm.DB, options PeerManagerOptio } peerManager := &PeerManager{ - selfID: selfID, - options: options, - rand: rand.New(rand.NewSource(time.Now().UnixNano())), // nolint:gosec - dialWaker: tmsync.NewWaker(), - evictWaker: tmsync.NewWaker(), - metrics: NopMetrics(), + selfID: selfID, + options: options, + rand: rand.New(rand.NewSource(time.Now().UnixNano())), // nolint:gosec + dialWaker: tmsync.NewWaker(), + evictWaker: tmsync.NewWaker(), + metrics: NopMetrics(), + logger: log.NewNopLogger(), + store: store, dialing: map[types.NodeID]bool{}, upgrading: map[types.NodeID]types.NodeID{}, @@ -316,6 +322,9 @@ func NewPeerManager(selfID types.NodeID, peerDB dbm.DB, options PeerManagerOptio if options.Metrics != nil { peerManager.metrics = options.Metrics } + if options.Logger != nil { + peerManager.logger = options.Logger + } if err = peerManager.configurePeers(); err != nil { return nil, err @@ -400,7 +409,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() diff --git a/internal/p2p/peermanager_test.go b/internal/p2p/peermanager_test.go index bc505a78e..7aa535670 100644 --- a/internal/p2p/peermanager_test.go +++ b/internal/p2p/peermanager_test.go @@ -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) { @@ -842,13 +843,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) { diff --git a/node/node.go b/node/node.go index 77773044b..367217423 100644 --- a/node/node.go +++ b/node/node.go @@ -203,7 +203,7 @@ func makeNode( } } - peerManager, peerCloser, err := createPeerManager(cfg, dbProvider, nodeKey.ID, nodeMetrics.p2p) + peerManager, peerCloser, err := createPeerManager(logger, cfg, dbProvider, nodeKey.ID, nodeMetrics.p2p) closers = append(closers, peerCloser) if err != nil { return nil, combineCloseError( diff --git a/node/seed.go b/node/seed.go index 92d55230f..3b9df3b0a 100644 --- a/node/seed.go +++ b/node/seed.go @@ -67,7 +67,7 @@ func makeSeedNode( // Setup Transport and Switch. p2pMetrics := p2p.PrometheusMetrics(cfg.Instrumentation.Namespace, "chain_id", genDoc.ChainID) - peerManager, closer, err := createPeerManager(cfg, dbProvider, nodeKey.ID, p2pMetrics) + peerManager, closer, err := createPeerManager(logger, cfg, dbProvider, nodeKey.ID, p2pMetrics) if err != nil { return nil, combineCloseError( fmt.Errorf("failed to create peer manager: %w", err), diff --git a/node/setup.go b/node/setup.go index 60f50b4f9..450fdc00f 100644 --- a/node/setup.go +++ b/node/setup.go @@ -199,6 +199,7 @@ func createEvidenceReactor( } func createPeerManager( + logger log.Logger, cfg *config.Config, dbProvider config.DBProvider, nodeID types.NodeID, @@ -227,6 +228,7 @@ func createPeerManager( maxUpgradeConns := uint16(4) options := p2p.PeerManagerOptions{ + Logger: logger.With("module", "peermanager"), SelfAddress: selfAddr, MaxConnected: maxConns, MaxConnectedUpgrade: maxUpgradeConns,