]> git.ipfire.org Git - thirdparty/haproxy.git/commit
OPTIM: server: ebtree lookups for findserver_unique_* functions
authorAurelien DARRAGON <adarragon@haproxy.com>
Mon, 4 Dec 2023 16:00:18 +0000 (17:00 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Thu, 21 Dec 2023 13:22:26 +0000 (14:22 +0100)
commit835263047e94fc6493a75b11a4d029c83c3ed00a
treeb10cd1b16962201324aa37c654cddfb1fe68b0fa
parent4bcfe30414005323a8d4ab986bce92bb736b59df
OPTIM: server: ebtree lookups for findserver_unique_* functions

4e5e2664 ("MINOR: proxy: add findserver_unique_id() and findserver_unique_name()")
added findserver_unique_id() and findserver_unique_name() functions that
were inspired from the historical findserver() function, so unfortunately
they don't perform well when used on large backend farms because they scan
the whole server list linearly.

I was about to provide a patch to optimize such functions when I stumbled
on Baptiste's work:
  19a106d24 ("MINOR: server: server_find functions: id, name, best_match")

It turns out Baptiste already implemented helper functions to supersed
the unoptimized findserver() function (at least at runtime when servers
have been assigned their final IDs and inserted in the lookup trees): they
offer more matching options and rely on eb lookups so they are much more
suitable for fast queries. I don't know how I missed that, but they are a
perfect base for the server rid matching functions.

So in this patch, we essentially revert 4e5e2664 to provide the optimized
equivalent functions named server_find_by_id_unique() and
server_find_by_name_unique(), then we force existing findserver_unique_*()
callers to switch to the new functions.

This patch depends on:
 - "OPTIM: server: eb lookup for server_find_by_name()"

This could be backported up to 2.8.
include/haproxy/proxy.h
include/haproxy/server.h
src/hlua.c
src/proxy.c
src/server.c