MINOR: agent-check: Be able to set absolute weight via an agent

Historically, an agent-check program is only able to set a proportial weight
to the initial server's weight. However, it could be handy to also set an
absolute value. It is the purpose of this patch.

Instead of changing the current way to set a server's weight, a new
agent-check command is introduced. The string "weight:", followed by an
positive interger or a positive interger percentage, can now be used. If the
value ends with the '%' sign, then the new weight will be proportional to
the initially weight of the server. Otherwise, the value is considered as an
absolute weight and must be between 0 and 256.

This patch should fix the issue #360.
This commit is contained in:
Christopher Faulet 2024-11-18 08:35:22 +01:00
parent 1be7140ade
commit e9bc5937c9
2 changed files with 20 additions and 1 deletions

View File

@ -17351,7 +17351,22 @@ agent-check
Values in this format will set the weight proportional to the initial
weight of a server as configured when HAProxy starts. Note that a zero
weight is reported on the stats page as "DRAIN" since it has the same
effect on the server (it's removed from the LB farm).
effect on the server (it's removed from the LB farm). It is the legacy way
to set the weight of a server. Setting it with the "weight:" prefix is
preferred.
- The string "weight:" following by an positive interger or a positive
interger percentage, with no space. If the value ends with the '%' sign,
then the new weight will be proportional to the initially weight of the
server. Otherwise, the value is considered as an absolute weight and must
be between 0 and 256. Servers which are part of a farm running a static
load-balancing algorithm have stricter limitations because the weight
cannot change once set. Thus for these servers, the only accepted values
are 0 and 100% (or 0 and the initial weight). Changes take effect
immediately, though certain LB algorithms require a certain amount of
requests to consider changes. Note that a zero weight is reported on the
stats page as "DRAIN" since it has the same effect on the server (it's
removed from the LB farm).
- The string "maxconn:" followed by an integer (no space between). Values
in this format will set the maxconn of a server. The maximum number of

View File

@ -1090,6 +1090,10 @@ enum tcpcheck_eval_ret tcpcheck_agent_expect_reply(struct check *check, struct t
else if (strncasecmp(cmd, "maxconn:", strlen("maxconn:")) == 0) {
sc = cmd;
}
/* try to parse a maxconn here */
else if (strncasecmp(cmd, "weight:", strlen("weight:")) == 0) {
ps = cmd + strlen("weight:");
}
else {
/* keep a copy of the first error */
if (!err)