OPTIM: server: eb lookup for server_find_by_name()

server_find_by_name() function was added in 19a106d24 ("MINOR: server:
server_find functions: id, name, best_match").

At that time, only the used_server_id proxy tree was available, thus the
name lookup was performed as a linear search.

However, used_server_name proxy tree was added in 84d6046a ("MINOR: proxy:
Add a "server by name" tree to proxy."), so we may safely rely on it to
perform server name lookups now. This will hopefully make the function
quite faster, especially when performing lookups in huge backend farms.
This commit is contained in:
Aurelien DARRAGON 2023-12-04 18:40:36 +01:00 committed by Christopher Faulet
parent e35fa36360
commit 4bcfe30414

View File

@ -3599,20 +3599,16 @@ struct server *server_find_by_name(struct proxy *bk, const char *name)
curserver = NULL; curserver = NULL;
if (*name == '#') { if (*name == '#') {
curserver = server_find_by_id(bk, atoi(name + 1)); curserver = server_find_by_id(bk, atoi(name + 1));
if (curserver)
return curserver;
} }
else { else {
curserver = bk->srv; struct ebpt_node *node;
while (curserver && (strcmp(curserver->id, name) != 0)) node = ebis_lookup(&bk->conf.used_server_name, name);
curserver = curserver->next; if (node)
curserver = container_of(node, struct server, conf.name);
if (curserver)
return curserver;
} }
return NULL; return curserver;
} }
struct server *server_find_best_match(struct proxy *bk, char *name, int id, int *diff) struct server *server_find_best_match(struct proxy *bk, char *name, int id, int *diff)