]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: check: reuse srv proto only if using same mode
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Fri, 13 Nov 2020 11:34:56 +0000 (12:34 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 13 Nov 2020 15:26:10 +0000 (16:26 +0100)
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

index c281bb2793625766e86db64104fe1468344d4df8..fe9f8be0e56bd507d57974af33bcf34be582c7ae 100644 (file)
@@ -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 <srv> server health-check settings */