From: Willy Tarreau Date: Tue, 20 Apr 2021 09:37:45 +0000 (+0200) Subject: BUG/MINOR: server: make srv_alloc_lb() allocate lb_nodes for consistent hash X-Git-Tag: v2.4-dev17~52 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dcb121fd9ce25ab5087fb45442bef24c031d2fe6;p=thirdparty%2Fhaproxy.git BUG/MINOR: server: make srv_alloc_lb() allocate lb_nodes for consistent hash The test in srv_alloc_lb() to allocate the lb_nodes[] array used in the consistent hash was incorrect, it wouldn't do it for consistent hash and could do it for regular random. No backport is needed as this was added for dynamic servers in 2.4-dev by commit f99f77a50 ("MEDIUM: server: implement 'add server' cli command"). --- diff --git a/src/server.c b/src/server.c index 3f05904fdd..fb7b750c7f 100644 --- a/src/server.c +++ b/src/server.c @@ -4299,7 +4299,8 @@ static int srv_alloc_lb(struct server *sv, struct proxy *be) sv->lb_nodes_tot = sv->uweight * BE_WEIGHT_SCALE; sv->lb_nodes_now = 0; - if ((be->lbprm.algo & BE_LB_PARM) == BE_LB_RR_RANDOM) { + if (((be->lbprm.algo & (BE_LB_KIND | BE_LB_PARM)) == (BE_LB_KIND_RR | BE_LB_RR_RANDOM)) || + ((be->lbprm.algo & (BE_LB_KIND | BE_LB_HASH_TYPE)) == (BE_LB_KIND_HI | BE_LB_HASH_CONS))) { sv->lb_nodes = calloc(sv->lb_nodes_tot, sizeof(*sv->lb_nodes)); if (!sv->lb_nodes)