]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: server: enhance error precision when applying server state
authorWilliam Dauchy <wdauchy@gmail.com>
Thu, 11 Feb 2021 21:51:27 +0000 (22:51 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 12 Feb 2021 15:04:52 +0000 (16:04 +0100)
server health checks and agent parameters are written the same way as
others to be able to enahcne code reuse: basically we make use of
parsing and assignment at the same place. It makes it difficult for
error handling to know whether srv object was modified partially or not.
The problem was already present with SRV resolution though.

I was a bit puzzled about the approach to take to be honest, and I did
not wanted to go into a full refactor, so I assumed it was ok to simply
notify whether the line was failed or partially applied.

Signed-off-by: William Dauchy <wdauchy@gmail.com>
src/server.c

index be5c48914985aed30645aae82c483c88d66a9691..e13c0df7d4e8dd491f24a77cc9272248b4697413 100644 (file)
@@ -2625,6 +2625,7 @@ static void srv_update_state(struct server *srv, int version, char **params)
        unsigned int port_svc;
        char *srvrecord;
        char *addr;
+       int partial_apply = 0;
 #ifdef USE_OPENSSL
        int use_ssl;
 #endif
@@ -2795,6 +2796,7 @@ static void srv_update_state(struct server *srv, int version, char **params)
                /* don't apply anything if one error has been detected */
                if (msg->data)
                        goto out;
+               partial_apply = 1;
 
                /* recover operational state and apply it to this server
                 * and all servers tracking this one */
@@ -3031,9 +3033,12 @@ static void srv_update_state(struct server *srv, int version, char **params)
  out:
        HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
        if (msg->data) {
-               chunk_appendf(msg, "\n");
-               ha_warning("server-state application failed for server '%s/%s'%s",
-                          srv->proxy->id, srv->id, msg->area);
+               if (partial_apply == 1)
+                       ha_warning("server-state partially applied for server '%s/%s'%s\n",
+                                  srv->proxy->id, srv->id, msg->area);
+               else
+                       ha_warning("server-state application failed for server '%s/%s'%s\n",
+                                  srv->proxy->id, srv->id, msg->area);
        }
  end:
        free_trash_chunk(msg);