diff --git a/doc/configuration.txt b/doc/configuration.txt index 276f660b2..65a8cefb4 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -6874,7 +6874,9 @@ get weight / Report the current weight and the initial weight of server in backend or an error if either doesn't exist. The initial weight is the one that appears in the configuration file. Both are normally equal - unless the current weight has been changed. + unless the current weight has been changed. Both the backend and the server + may be specified either by their name or by their numeric ID, prefixed with a + dash ('#'). set weight / [%] Change a server's weight to the value passed in argument. If the value ends @@ -6888,7 +6890,9 @@ set weight / [%] requests to consider changes. A typical usage of this command is to disable a server during an update by setting its weight to zero, then to enable it again after the update by setting it back to 100%. This command is restricted - and can only be issued on sockets configured for level "admin". + and can only be issued on sockets configured for level "admin". Both the + backend and the server may be specified either by their name or by their + numeric ID, prefixed with a dash ('#'). /* diff --git a/src/proxy.c b/src/proxy.c index e44d3d905..dd6504802 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -88,11 +88,21 @@ int get_backend_server(const char *bk_name, const char *sv_name, { struct proxy *p; struct server *s; + int pid, sid; *sv = NULL; + pid = 0; + if (*bk_name == '#') + pid = atoi(bk_name + 1); + sid = 0; + if (*sv_name == '#') + sid = atoi(sv_name + 1); + for (p = proxy; p; p = p->next) - if ((p->cap & PR_CAP_BE) && (strcmp(p->id, bk_name) == 0)) + if ((p->cap & PR_CAP_BE) && + ((pid && p->uuid == pid) || + (!pid && strcmp(p->id, bk_name) == 0))) break; if (bk) *bk = p; @@ -100,7 +110,8 @@ int get_backend_server(const char *bk_name, const char *sv_name, return 0; for (s = p->srv; s; s = s->next) - if (strcmp(s->id, sv_name) == 0) + if ((sid && s->puid == sid) || + (!sid && strcmp(s->id, sv_name) == 0)) break; *sv = s; if (!s)