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 <wdau...@gmail.com>
---
 src/server.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/server.c b/src/server.c
index 739bcfba6..b0a8f90d4 100644
--- a/src/server.c
+++ b/src/server.c
@@ -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 */
@@ -3032,8 +3034,12 @@ static void srv_update_state(struct server *srv, int 
version, char **params)
        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",
+                                  srv->proxy->id, srv->id, msg->area);
+               else
+                       ha_warning("server-state application failed for server 
'%s/%s'%s",
+                                  srv->proxy->id, srv->id, msg->area);
        }
  end:
        free_trash_chunk(msg);
-- 
2.30.0


Reply via email to