From 0519bd4d04cc3455233d9a74c5d682a958fc02b2 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Fri, 13 Nov 2020 12:34:56 +0100 Subject: [PATCH] BUG/MEDIUM: check: reuse srv proto only if using same mode Only reuse the mux from server if the check is using the same mode. For example, this prevents a tcp-check on a h2 server to select the h2 multiplexer instead of passthrough. This bug was introduced by the following commit : BUG/MEDIUM: checks: Use the mux protocol specified on the server line It must be backported up to 2.2. Fixes github issue #945. --- src/check.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/check.c b/src/check.c index c281bb279..fe9f8be0e 100644 --- a/src/check.c +++ b/src/check.c @@ -1228,10 +1228,12 @@ static int init_srv_check(struct server *srv) const char *err; struct tcpcheck_rule *r; int ret = 0; + int check_type; if (!srv->do_check) goto out; + check_type = srv->check.tcpcheck_rules->flags & TCPCHK_RULES_PROTO_CHK; /* If neither a port nor an addr was specified and no check transport * layer is forced, then the transport layer used by the checks is the @@ -1253,8 +1255,11 @@ static int init_srv_check(struct server *srv) /* Inherit the mux protocol from the server if not already defined for * the check */ - if (srv->mux_proto && !srv->check.mux_proto) + if (srv->mux_proto && !srv->check.mux_proto && + ((srv->mux_proto->mode == PROTO_MODE_HTTP && check_type == TCPCHK_RULES_HTTP_CHK) || + (srv->mux_proto->mode == PROTO_MODE_TCP && check_type != TCPCHK_RULES_HTTP_CHK))) { srv->check.mux_proto = srv->mux_proto; + } /* validate server health-check settings */