From 02963617852e37a21c4f587c1eb18a8f274b9961 Mon Sep 17 00:00:00 2001 From: Csaba Kiraly Date: Fri, 25 Apr 2025 00:56:12 +0200 Subject: [PATCH] eth: unregister per-peer metrics on peer close Signed-off-by: Csaba Kiraly --- eth/protocols/eth/peer.go | 1 + eth/protocols/eth/peer_metrics.go | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/eth/protocols/eth/peer.go b/eth/protocols/eth/peer.go index 79edc7d77c..586551b452 100644 --- a/eth/protocols/eth/peer.go +++ b/eth/protocols/eth/peer.go @@ -95,6 +95,7 @@ func NewPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter, txpool TxPool) *Pe // clean it up! func (p *Peer) Close() { close(p.term) + p.meters.Close() } // ID retrieves the peer's unique identifier. diff --git a/eth/protocols/eth/peer_metrics.go b/eth/protocols/eth/peer_metrics.go index 68f74b9b99..ce6b4e2373 100644 --- a/eth/protocols/eth/peer_metrics.go +++ b/eth/protocols/eth/peer_metrics.go @@ -19,6 +19,9 @@ package eth import "github.com/ethereum/go-ethereum/metrics" type peerMeters struct { + base string + reg metrics.Registry + txReceived *metrics.Meter txSent *metrics.Meter @@ -30,7 +33,13 @@ type peerMeters struct { // newPeerMeters registers and returns peer-level meters. func newPeerMeters(base string, r metrics.Registry) *peerMeters { + if r == nil { + r = metrics.DefaultRegistry + } return &peerMeters{ + base: base, + reg: r, + txReceived: metrics.NewRegisteredMeter(base+"/txReceived", r), txSent: metrics.NewRegisteredMeter(base+"/txSent", r), @@ -40,3 +49,12 @@ func newPeerMeters(base string, r metrics.Registry) *peerMeters { txReplyOtherRejectMeter: metrics.NewRegisteredMeter(base+"/eth/fetcher/transaction/replies/otherreject", r), } } + +func (m *peerMeters) Close() { + m.reg.Unregister(m.base + "/txReceived") + m.reg.Unregister(m.base + "/txSent") + m.reg.Unregister(m.base + "/eth/fetcher/transaction/replies/in") + m.reg.Unregister(m.base + "/eth/fetcher/transaction/replies/known") + m.reg.Unregister(m.base + "/eth/fetcher/transaction/replies/underpriced") + m.reg.Unregister(m.base + "/eth/fetcher/transaction/replies/otherreject") +}