Skip to content

Commit 7c92557

Browse files
authored
Merge pull request #2356 from CortexFoundation/dev
add metrics for inbound connection error
2 parents fd55f85 + 95808a2 commit 7c92557

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

p2p/metrics.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,18 @@ var (
6666

6767
// capture the rest of errors that are not handled by the above meters
6868
dialOtherError = metrics.NewRegisteredMeter("p2p/dials/error/other", nil)
69+
70+
// handshake error meters for inbound connections
71+
serveTooManyPeers = metrics.NewRegisteredMeter("p2p/serves/error/saturated", nil)
72+
serveAlreadyConnected = metrics.NewRegisteredMeter("p2p/serves/error/known", nil)
73+
serveSelf = metrics.NewRegisteredMeter("p2p/serves/error/self", nil)
74+
serveUselessPeer = metrics.NewRegisteredMeter("p2p/serves/error/useless", nil)
75+
serveUnexpectedIdentity = metrics.NewRegisteredMeter("p2p/serves/error/id/unexpected", nil)
76+
serveEncHandshakeError = metrics.NewRegisteredMeter("p2p/serves/error/rlpx/enc", nil) //EOF; connection reset during handshake; (message too big?)
77+
serveProtoHandshakeError = metrics.NewRegisteredMeter("p2p/serves/error/rlpx/proto", nil)
78+
79+
// capture the rest of errors that are not handled by the above meters
80+
serveOtherError = metrics.NewRegisteredMeter("p2p/serves/error/other", nil)
6981
)
7082

7183
// markDialError matches errors that occur while setting up a dial connection to the
@@ -99,6 +111,36 @@ func markDialError(err error) {
99111
}
100112
}
101113

114+
// markServeError matches errors that occur while serving an inbound connection
115+
// to the corresponding meter.
116+
func markServeError(err error) {
117+
if !metrics.Enabled {
118+
return
119+
}
120+
121+
var reason DiscReason
122+
var handshakeErr *protoHandshakeError
123+
d := errors.As(err, &reason)
124+
switch {
125+
case d && reason == DiscTooManyPeers:
126+
serveTooManyPeers.Mark(1)
127+
case d && reason == DiscAlreadyConnected:
128+
serveAlreadyConnected.Mark(1)
129+
case d && reason == DiscSelf:
130+
serveSelf.Mark(1)
131+
case d && reason == DiscUselessPeer:
132+
serveUselessPeer.Mark(1)
133+
case d && reason == DiscUnexpectedIdentity:
134+
serveUnexpectedIdentity.Mark(1)
135+
case errors.As(err, &handshakeErr):
136+
serveProtoHandshakeError.Mark(1)
137+
case errors.Is(err, errEncHandshakeError):
138+
serveEncHandshakeError.Mark(1)
139+
default:
140+
serveOtherError.Mark(1)
141+
}
142+
}
143+
102144
// meteredConn is a wrapper around a net.Conn that meters both the
103145
// inbound and outbound network traffic.
104146
type meteredConn struct {

p2p/server.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,8 @@ func (srv *Server) SetupConn(fd net.Conn, flags connFlag, dialDest *enode.Node)
864864
if err != nil {
865865
if !c.is(inboundConn) {
866866
markDialError(err)
867+
} else {
868+
markServeError(err)
867869
}
868870
c.close(err)
869871
}

0 commit comments

Comments
 (0)