lib/netutil: ignore arificial timeout generated by net/http.Server

This prevents from the inflated vm_tcplistener_read_timeouts_total counter
This commit is contained in:
Aliaksandr Valialkin 2023-06-16 22:50:30 -07:00
parent 298aab3f54
commit 0f01eea4e9
No known key found for this signature in database
GPG Key ID: A72BEC6CD3D0DED1

View File

@ -7,6 +7,7 @@ import (
"net"
"sync/atomic"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/fasttime"
"github.com/VictoriaMetrics/metrics"
)
@ -54,13 +55,19 @@ type statConn struct {
}
func (sc *statConn) Read(p []byte) (int, error) {
startTime := fasttime.UnixTimestamp()
n, err := sc.Conn.Read(p)
sc.cm.readCalls.Inc()
sc.cm.readBytes.Add(n)
if err != nil && err != io.EOF {
var ne net.Error
if errors.As(err, &ne) && ne.Timeout() {
sc.cm.readTimeouts.Inc()
if fasttime.UnixTimestamp()-startTime <= 1 {
// Ignore artificial timeout generated by net/http.Server
// See https://cs.opensource.google/go/go/+/refs/tags/go1.20.5:src/net/http/server.go;l=701
} else {
sc.cm.readTimeouts.Inc()
}
} else {
sc.cm.readErrors.Inc()
}