From 250c19032f030a81dca01541e3c2947d117a041c Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Fri, 22 Mar 2024 17:40:16 +0100 Subject: [PATCH] BUG/MINOR: server: reject enabled for dynamic server 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 | 1 - src/server.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/management.txt b/doc/management.txt index 0c7b2e493..d5d2636b7 100644 --- a/doc/management.txt +++ b/doc/management.txt @@ -1696,7 +1696,6 @@ add server / [args]* - crt - disabled - downinter - - enabled - error-limit - fall - fastinter diff --git a/src/server.c b/src/server.c index 555cae82c..2f780b2b7 100644 --- a/src/server.c +++ b/src/server.c @@ -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 */