mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 13:51:26 +02:00
MEDIUM: server: Allow relative weights greater than 100%
Allow relative weights greater than 100%, capping the absolute value to 256 which is the largest supported absolute weight. Signed-off-by: Simon Horman <horms@verge.net.au>
This commit is contained in:
parent
7d09b9a4df
commit
58b5d292b3
@ -11439,18 +11439,19 @@ set timeout cli <delay>
|
|||||||
set weight <backend>/<server> <weight>[%]
|
set weight <backend>/<server> <weight>[%]
|
||||||
Change a server's weight to the value passed in argument. If the value ends
|
Change a server's weight to the value passed in argument. If the value ends
|
||||||
with the '%' sign, then the new weight will be relative to the initially
|
with the '%' sign, then the new weight will be relative to the initially
|
||||||
configured weight. Relative weights are only permitted between 0 and 100%,
|
configured weight. Absolute weights are permitted between 0 and 256.
|
||||||
and absolute weights are permitted between 0 and 256. Servers which are part
|
Relative weights must be positive with the resulting absolute weight is
|
||||||
of a farm running a static load-balancing algorithm have stricter limitations
|
capped at 256. Servers which are part of a farm running a static
|
||||||
because the weight cannot change once set. Thus for these servers, the only
|
load-balancing algorithm have stricter limitations because the weight
|
||||||
accepted values are 0 and 100% (or 0 and the initial weight). Changes take
|
cannot change once set. Thus for these servers, the only accepted values
|
||||||
effect immediately, though certain LB algorithms require a certain amount of
|
are 0 and 100% (or 0 and the initial weight). Changes take effect
|
||||||
requests to consider changes. A typical usage of this command is to disable
|
immediately, though certain LB algorithms require a certain amount of
|
||||||
a server during an update by setting its weight to zero, then to enable it
|
requests to consider changes. A typical usage of this command is to
|
||||||
again after the update by setting it back to 100%. This command is restricted
|
disable a server during an update by setting its weight to zero, then to
|
||||||
and can only be issued on sockets configured for level "admin". Both the
|
enable it again after the update by setting it back to 100%. This command
|
||||||
backend and the server may be specified either by their name or by their
|
is restricted and can only be issued on sockets configured for level
|
||||||
numeric ID, prefixed with a sharp ('#').
|
"admin". Both the backend and the server may be specified either by their
|
||||||
|
name or by their numeric ID, prefixed with a sharp ('#').
|
||||||
|
|
||||||
show errors [<iid>]
|
show errors [<iid>]
|
||||||
Dump last known request and response errors collected by frontends and
|
Dump last known request and response errors collected by frontends and
|
||||||
|
@ -176,9 +176,14 @@ const char *server_parse_weight_change_request(struct server *sv,
|
|||||||
|
|
||||||
w = atoi(weight_str);
|
w = atoi(weight_str);
|
||||||
if (strchr(weight_str, '%') != NULL) {
|
if (strchr(weight_str, '%') != NULL) {
|
||||||
if (w < 0 || w > 100)
|
if (w < 0)
|
||||||
return "Relative weight must be positive.\n";
|
return "Relative weight must be positive.\n";
|
||||||
|
/* Avoid integer overflow */
|
||||||
|
if (w > 25600)
|
||||||
|
w = 25600;
|
||||||
w = sv->iweight * w / 100;
|
w = sv->iweight * w / 100;
|
||||||
|
if (w > 256)
|
||||||
|
w = 256;
|
||||||
}
|
}
|
||||||
else if (w < 0 || w > 256)
|
else if (w < 0 || w > 256)
|
||||||
return "Absolute weight can only be between 0 and 256 inclusive.\n";
|
return "Absolute weight can only be between 0 and 256 inclusive.\n";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user