Skip to content

Commit ca29804

Browse files
cskiralysivaratrisrinivas
authored andcommitted
p2p: better dial/serve success metrics (ethereum#31629)
Our previous success metrics gave success even if a peer disconnected right after connection. These metrics only count peers that stayed connected for at least 1 min. The 1 min limit is an arbitrary choice. We do not use this for decision logic, only statistics.
1 parent 0f9999a commit ca29804

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

p2p/metrics.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ var (
5151
dialSuccessMeter = metrics.NewRegisteredMeter("p2p/dials/success", nil)
5252
dialConnectionError = metrics.NewRegisteredMeter("p2p/dials/error/connection", nil)
5353

54+
// count peers that stayed connected for at least 1 min
55+
serve1MinSuccessMeter = metrics.NewRegisteredMeter("p2p/serves/success/1min", nil)
56+
dial1MinSuccessMeter = metrics.NewRegisteredMeter("p2p/dials/success/1min", nil)
57+
5458
// handshake error meters
5559
dialTooManyPeers = metrics.NewRegisteredMeter("p2p/dials/error/saturated", nil)
5660
dialAlreadyConnected = metrics.NewRegisteredMeter("p2p/dials/error/known", nil)

p2p/peer.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,8 @@ func (p *Peer) run() (remoteRequested bool, err error) {
254254
p.wg.Add(2)
255255
go p.readLoop(readErr)
256256
go p.pingLoop()
257+
live1min := time.NewTimer(1 * time.Minute)
258+
defer live1min.Stop()
257259

258260
// Start all protocol handlers.
259261
writeStart <- struct{}{}
@@ -285,6 +287,12 @@ loop:
285287
case err = <-p.disc:
286288
reason = discReasonForError(err)
287289
break loop
290+
case <-live1min.C:
291+
if p.Inbound() {
292+
serve1MinSuccessMeter.Mark(1)
293+
} else {
294+
dial1MinSuccessMeter.Mark(1)
295+
}
288296
}
289297
}
290298

0 commit comments

Comments
 (0)