]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
TMP debug connection reuse hash
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 29 Oct 2025 16:31:13 +0000 (17:31 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 30 Oct 2025 16:35:08 +0000 (17:35 +0100)
include/haproxy/backend.h
src/backend.c

index 3fae242802b2e473eee90d75be91858338fc56a8..b13f0b1a0946709d81a5e493837be5aae97b4fd5 100644 (file)
@@ -50,7 +50,8 @@ int64_t be_calculate_conn_hash(struct server *srv, struct stream *strm,
                                struct session *sess,
                                struct sockaddr_storage *src,
                                struct sockaddr_storage *dst,
-                               struct ist name);
+                               struct ist name,
+                               char **debug_str);
 int be_reuse_connection(int64_t hash, struct session *sess,
                         struct proxy *be, struct server *srv,
                         struct stconn *sc, enum obj_type *target, int not_first_req);
index d0c1b8077a25eeb46857fbea714cee07ecf69688..ed42dbeee7e275f69bb6eeeecb44a11e770983ad 100644 (file)
@@ -1584,7 +1584,7 @@ int64_t be_calculate_conn_hash(struct server *srv, struct stream *strm,
                                struct session *sess,
                                struct sockaddr_storage *src,
                                struct sockaddr_storage *dst,
-                               struct ist name)
+                               struct ist name, char **debug_str)
 {
        struct conn_hash_params hash_params;
 
@@ -1596,18 +1596,42 @@ int64_t be_calculate_conn_hash(struct server *srv, struct stream *strm,
 
        /* 1. target */
        hash_params.target = srv ? &srv->obj_type : strm->target;
+       if (debug_str)
+               memprintf(debug_str, "target=%p", hash_params.target);
 
        /* 2. pool-conn-name */
        if (istlen(name)) {
                hash_params.name_prehash =
                  conn_hash_prehash(istptr(name), istlen(name));
+               if (debug_str) {
+                       if (*debug_str) memprintf(debug_str, "%s name=%s", *debug_str, ist0(name));
+                       else            memprintf(debug_str, "name=%s",                ist0(name));
+               }
        }
 
        /* 3. destination address */
        hash_params.dst_addr = dst;
+       if (dst && debug_str) {
+               char dstbuf[INET6_ADDRSTRLEN];
+               ushort dstport;
+
+               addr_to_str(dst, dstbuf, sizeof(dstbuf));
+               dstport = get_host_port(dst);
+               if (*debug_str) memprintf(debug_str, "%s dst=%s:%hu", *debug_str, dstbuf, dstport);
+               else            memprintf(debug_str, "dst=%s:%hu",                dstbuf, dstport);
+       }
 
        /* 4. source address */
        hash_params.src_addr = src;
+       if (src && debug_str) {
+               char srcbuf[INET6_ADDRSTRLEN];
+               ushort srcport;
+
+               addr_to_str(src, srcbuf, sizeof(srcbuf));
+               srcport = get_host_port(src);
+               if (*debug_str) memprintf(debug_str, "%s src=%s:%hu", *debug_str, srcbuf, srcport);
+               else            memprintf(debug_str, "src=%s:%hu",                srcbuf, srcport);
+       }
 
        /* 5. proxy protocol */
        if (strm && srv && srv->pp_opts & SRV_PP_ENABLED) {