]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: server: reject enabled for dynamic server
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Fri, 22 Mar 2024 16:40:16 +0000 (17:40 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 28 Mar 2024 10:51:05 +0000 (11:51 +0100)
Since their first implementation, dynamic servers are created into
maintenance state. This has been done purposely to avoid immediate
activation of a newly inserted server.

However, this principle is incompatible if "enabled" keyword is used on
"add server". The newly created instance will be unreacheable as proxy
load-balancing algorithm is not informed of its presence via
srv_lb_propagate(). The new server could be unblocked by toggling its
state with "disable server" / "enable server" commands, which will
trigger srv_lb_propagate() invocation.

To avoid this unexpected state, simply forbid "enabled" keyword for
dynamic servers. In the long-term, it could be possible to re authorize
it but at least this requires to call srv_lb_propagate() on dynamic
server creation.

This should fix github issue #2497.

This patch should not be backported as-is, to avoid breaking dynamic
servers API on stable versions. "enabled" should instead be ignored for
them. This will be implemented in a dedicated patch on top of 2.9.

doc/management.txt
src/server.c

index 0c7b2e493238a00cd58b46fee9b21175820e748c..d5d2636b747e966831fdaedd419bba2574261757 100644 (file)
@@ -1696,7 +1696,6 @@ add server <backend>/<server> [args]*
   - crt
   - disabled
   - downinter
-  - enabled
   - error-limit
   - fall
   - fastinter
index 555cae82c692f88ba0862e1410e6bd7a84b358d5..2f780b2b78add00ac1868a0fb2757aed9444732f 100644 (file)
@@ -2218,7 +2218,7 @@ static struct srv_kw_list srv_kws = { "ALL", { }, {
        { "backup",               srv_parse_backup,               0,  1,  1 }, /* Flag as backup server */
        { "cookie",               srv_parse_cookie,               1,  1,  0 }, /* Assign a cookie to the server */
        { "disabled",             srv_parse_disabled,             0,  1,  1 }, /* Start the server in 'disabled' state */
-       { "enabled",              srv_parse_enabled,              0,  1,  1 }, /* Start the server in 'enabled' state */
+       { "enabled",              srv_parse_enabled,              0,  1,  0 }, /* Start the server in 'enabled' state */
        { "error-limit",          srv_parse_error_limit,          1,  1,  1 }, /* Configure the consecutive count of check failures to consider a server on error */
        { "ws",                   srv_parse_ws,                   1,  1,  1 }, /* websocket protocol */
        { "id",                   srv_parse_id,                   1,  0,  1 }, /* set id# of server */