From: Christopher Faulet Date: Mon, 18 Nov 2024 07:35:22 +0000 (+0100) Subject: MINOR: agent-check: Be able to set absolute weight via an agent X-Git-Tag: v3.1-dev14~106 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e9bc5937c9f1487aa06ecb93faea62ca1cf718f0;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/doc/configuration.txt b/doc/configuration.txt index afe5edb385..ebebcbd0a0 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -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 diff --git a/src/tcpcheck.c b/src/tcpcheck.c index 10aad1af82..6e12eb6c28 100644 --- a/src/tcpcheck.c +++ b/src/tcpcheck.c @@ -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)