]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: server: group postinit server tasks under _srv_postparse()
authorAurelien DARRAGON <adarragon@haproxy.com>
Thu, 8 May 2025 17:15:24 +0000 (19:15 +0200)
committerAurelien DARRAGON <adarragon@haproxy.com>
Mon, 2 Jun 2025 15:51:05 +0000 (17:51 +0200)
init_srv_requeue() and init_srv_slowstart() functions are called after
initial server parsing via REGISTER_POST_SERVER_CHECK() hook, and they
are also manually called for dynamic server after the server is
initialized.

This may conflict with _srv_postparse() which is also registered via
REGISTER_POST_SERVER_CHECK() and called during dynamic server creation

To ensure functions don't conflict with each other, let's ensure they
are executed in proper order by calling init_srv_requeue and
init_srv_slowstart() from _srv_postparse() which now becomes the parent
function for server related postparsing stuff. No change of behavior is
expected.

src/server.c

index 26cb50ebeee41f7f8662536b958a7cd4da6cea35..54c7518e185b4a78fe6d7fa5219eb45965231ee4 100644 (file)
@@ -3409,12 +3409,28 @@ static int _srv_check_proxy_mode(struct server *srv, char postparse)
  *
  * Returns ERR_NONE on success else a combination or ERR_CODE.
  */
+static int init_srv_requeue(struct server *srv);
+static int init_srv_slowstart(struct server *srv);
 static int _srv_postparse(struct server *srv)
 {
        int err_code = ERR_NONE;
 
        err_code |= _srv_check_proxy_mode(srv, 1);
 
+       if (err_code & ERR_CODE)
+               goto out;
+
+       err_code |= init_srv_requeue(srv);
+
+       if (err_code & ERR_CODE)
+               goto out;
+
+       err_code |= init_srv_slowstart(srv);
+
+       if (err_code & ERR_CODE)
+               goto out;
+
+ out:
        return err_code;
 }
 REGISTER_POST_SERVER_CHECK(_srv_postparse);
@@ -5765,8 +5781,6 @@ static int init_srv_slowstart(struct server *srv)
 
        return ERR_NONE;
 }
-REGISTER_POST_SERVER_CHECK(init_srv_slowstart);
-
 
 /* allocate the tasklet that's meant to permit a server */
 static int init_srv_requeue(struct server *srv)
@@ -5783,7 +5797,6 @@ static int init_srv_requeue(struct server *srv)
        t->context = srv;
        return ERR_NONE;
 }
-REGISTER_POST_SERVER_CHECK(init_srv_requeue);
 
 /* Memory allocation and initialization of the per_thr field.
  * Returns 0 if the field has been successfully initialized, -1 on failure.
@@ -5959,10 +5972,6 @@ static int cli_parse_add_server(char **args, char *payload, struct appctx *appct
        if (errcode)
                goto out;
 
-       errcode = _srv_postparse(srv);
-       if (errcode)
-               goto out;
-
        /* A dynamic server does not currently support resolution.
         *
         * Initialize it explicitly to the "none" method to ensure no
@@ -6041,11 +6050,8 @@ static int cli_parse_add_server(char **args, char *payload, struct appctx *appct
                srv->agent.state &= ~CHK_ST_ENABLED;
        }
 
-       /* Init slowstart if needed. */
-       if (init_srv_slowstart(srv))
-               goto out;
-
-       if (init_srv_requeue(srv) != 0)
+       errcode = _srv_postparse(srv);
+       if (errcode)
                goto out;
 
        /* Attach the server to the end of the proxy linked list. Note that this