Re: [PATCH 0/1] CI improvement, display coredumps if any

2024-04-01 Thread Willy Tarreau
On Wed, Mar 27, 2024 at 04:49:53PM +0100, Ilya Shipitsin wrote:
> it is pretty rare case, however displaying "bt" may provide some ideas what 
> went wrong

Applied, thanks Ilya! I think this will sometimes be quite helpful
because till now it was only "grrr... sig11 and we don't know why".

Willy



Re: [PATCH 1/2] REGTESTS: Do not use REQUIRE_VERSION for HAProxy 2.5+ (4)

2024-04-01 Thread Willy Tarreau
Hi Tim!

On Fri, Mar 29, 2024 at 05:12:47PM +0100, Tim Duesterhus wrote:
> Introduced in:
> 
> dfb1cea69 REGTESTS: promex: Adapt script to be less verbose
> 36d936dd1 REGTESTS: write a full reverse regtest
> b57f15158 REGTESTS: provide a reverse-server test with name argument
> f0bff2947 REGTESTS: provide a reverse-server test
> 
> see also:
> 
> fbbbc33df REGTESTS: Do not use REQUIRE_VERSION for HAProxy 2.5+
(...)

Both series applied (regtests and cocci).
Thank you!
Willy



Re: [PATCH] MEDIUM: lb-chash: Deterministic node hashes based on server address

2024-04-01 Thread Willy Tarreau
Hi Anthony,

On Mon, Apr 01, 2024 at 11:47:54AM -0400, Anthony Deschamps wrote:
> Hi Willy,
> 
> Those changes are easy enough to make, so I've attached the patch again
> with those changes. I had to make a few small adjustments to the commit
> message anyway (some things that changed as a result of reviewing this
> path). Let me know if there's anything else that I can help with.

Looks perfect now, I've merged it. Thank you very much!
Willy



Re: [PATCH] MEDIUM: lb-chash: Deterministic node hashes based on server address

2024-04-01 Thread Anthony Deschamps
Hi Willy,

Those changes are easy enough to make, so I've attached the patch again
with those changes. I had to make a few small adjustments to the commit
message anyway (some things that changed as a result of reviewing this
path). Let me know if there's anything else that I can help with.

Thank you,
Anthony
From 30896b2f6368cd022bfb574d4d5f647483b79a59 Mon Sep 17 00:00:00 2001
From: Anthony Deschamps 
Date: Fri, 16 Feb 2024 16:00:35 -0500
Subject: [PATCH] MEDIUM: lb-chash: Deterministic node hashes based on server
 address

Motivation: When services are discovered through DNS resolution, the order in
which DNS records get resolved and assigned to servers is arbitrary. Therefore,
even though two HAProxy instances using chash balancing might agree that a
particular request should go to server3, it is likely the case that they have
assigned different IPs and ports to the server in that slot.

This patch adds a server option, "hash-key " which can be set to "id" (the
existing behaviour, default), "addr", or "addr-port". By deriving the keys for
the chash tree nodes from a server's address and port we ensure that independent
HAProxy instances will agree on routing decisions. If an address is not known
then the key is derived from the server's puid as it was previously.

When adjusting a server's weight, we now check whether the server's hash has
changed. If it has, we have to remove all its nodes first, since the node keys
will also have to change.
---
 doc/configuration.txt  | 25 +++
 include/haproxy/server-t.h |  9 
 src/lb_chash.c | 91 +++---
 src/server.c   | 31 +
 4 files changed, 150 insertions(+), 6 deletions(-)

diff --git a/doc/configuration.txt b/doc/configuration.txt
index 1065e6098..0d5649d34 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -4813,6 +4813,8 @@ error-log-format  X  X X -
 force-persist -  - X X
 filter-  X X X
 fullconn  X  - X X
+hash-balance-factor   X  - X X
+hash-key  X  - X X
 hash-type X  - X X
 http-after-response   X (!)  X X X
 http-check commentX  - X X
@@ -6606,6 +6608,29 @@ hash-balance-factor 
   See also : "balance" and "hash-type".
 
 
+hash-key 
+  Specify how "hash-type consistent" node keys are computed
+
+  Arguments :
+may be one of the following :
+
+  id The node keys will be derived from the server's numeric
+ identifier as set from "id" or which defaults to its position
+ in the server list.
+
+  addr   The node keys will be derived from the server's address, when
+ available, or else fall back on "id".
+
+  addr-port  The node keys will be derived from the server's address and
+ port, when available, or else fall back on "id".
+
+  The "addr" and "addr-port" options may be useful in scenarios where multiple
+  HAProxy processes are balancing traffic to the same set of servers. If the
+  server order of each process is different (because, for example, DNS records
+  were resolved in different orders) then this will allow each independent
+  HAProxy processes to agree on routing decisions.
+
+
 hash-type   
   Specify a method to use for mapping hashes to servers
 
diff --git a/include/haproxy/server-t.h b/include/haproxy/server-t.h
index f077ff2f8..811eae712 100644
--- a/include/haproxy/server-t.h
+++ b/include/haproxy/server-t.h
@@ -223,6 +223,13 @@ struct pid_list {
 	int exited;
 };
 
+/* srv methods of computing chash keys */
+enum srv_hash_key {
+	SRV_HASH_KEY_ID = 0, /* derived from server puid */
+	SRV_HASH_KEY_ADDR,   /* derived from server address */
+	SRV_HASH_KEY_ADDR_PORT   /* derived from server address and port */
+};
+
 /* A tree occurrence is a descriptor of a place in a tree, with a pointer back
  * to the server itself.
  */
@@ -366,6 +373,8 @@ struct server {
 	struct tree_occ *lb_nodes;  /* lb_nodes_tot * struct tree_occ */
 	unsigned lb_nodes_tot;  /* number of allocated lb_nodes (C-HASH) */
 	unsigned lb_nodes_now;  /* number of lb_nodes placed in the tree (C-HASH) */
+	enum srv_hash_key hash_key; /* method to compute node hash (C-HASH) */
+	unsigned lb_server_key; /* hash of the values indicated by "hash_key" (C-HASH) */
 
 	const struct netns_entry *netns;/* contains network namespace name or NULL. Network namespace comes from configuration */
 	struct xprt_ops *xprt;  /*