mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 23:27:04 +02:00
OPTIM: server: eb lookup for server_find_by_name()
server_find_by_name() function was added in19a106d24
("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 in84d6046a
("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:
parent
e35fa36360
commit
4bcfe30414
14
src/server.c
14
src/server.c
@ -3599,20 +3599,16 @@ struct server *server_find_by_name(struct proxy *bk, const char *name)
|
||||
curserver = NULL;
|
||||
if (*name == '#') {
|
||||
curserver = server_find_by_id(bk, atoi(name + 1));
|
||||
if (curserver)
|
||||
return curserver;
|
||||
}
|
||||
else {
|
||||
curserver = bk->srv;
|
||||
struct ebpt_node *node;
|
||||
|
||||
while (curserver && (strcmp(curserver->id, name) != 0))
|
||||
curserver = curserver->next;
|
||||
|
||||
if (curserver)
|
||||
return curserver;
|
||||
node = ebis_lookup(&bk->conf.used_server_name, name);
|
||||
if (node)
|
||||
curserver = container_of(node, struct server, conf.name);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return curserver;
|
||||
}
|
||||
|
||||
struct server *server_find_best_match(struct proxy *bk, char *name, int id, int *diff)
|
||||
|
Loading…
Reference in New Issue
Block a user