]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: mux-h2/stats: not all GOAWAY frames are errors
authorWilly Tarreau <w@1wt.eu>
Tue, 1 Dec 2020 09:47:18 +0000 (10:47 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 1 Dec 2020 09:47:18 +0000 (10:47 +0100)
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

index ce39f750b547a04d92c055475c4b142aa767cdf6..741708d19df743a6b48df949d32f7a7fd7c36536 100644 (file)
@@ -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;
 }