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