From f965b2ad136b6487571f9a8fb0b3e58f778c002c Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 1 Dec 2020 10:47:18 +0100 Subject: [PATCH] BUG/MINOR: mux-h2/stats: not all GOAWAY frames are errors The stats on haproxy.org reported ~12k GOAWAY for ~34k connections, with only 2 protocol errorss. It turns out that the GOAWAY frame counter added in commit a8879238c ("MINOR: mux-h2: report detected error on stats") matches a bit too many situations. First it counts those which are not sent as well as failed retries, second it counts as errors the cases of attempts to cleanly close, while it's titled "GOAWAY sent on detected error". Let's address this by moving the counter up one line and excluding the clean codes. This can be backported to 2.3. --- src/mux_h2.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/mux_h2.c b/src/mux_h2.c index ce39f750b..741708d19 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -1803,8 +1803,18 @@ static int h2c_send_goaway_error(struct h2c *h2c, struct h2s *h2s) } } h2c->flags |= H2_CF_GOAWAY_SENT; + + /* some codes are not for real errors, just attempts to close cleanly */ + switch (h2c->errcode) { + case H2_ERR_NO_ERROR: + case H2_ERR_ENHANCE_YOUR_CALM: + case H2_ERR_REFUSED_STREAM: + case H2_ERR_CANCEL: + break; + default: + HA_ATOMIC_ADD(&h2c->px_counters->goaway_resp, 1); + } out: - HA_ATOMIC_ADD(&h2c->px_counters->goaway_resp, 1); TRACE_LEAVE(H2_EV_TX_FRAME|H2_EV_TX_GOAWAY, h2c->conn); return ret; }