diff --git a/include/haproxy/server-t.h b/include/haproxy/server-t.h index 08e338be480e2..6aba3ef0222df 100644 --- a/include/haproxy/server-t.h +++ b/include/haproxy/server-t.h @@ -81,9 +81,13 @@ enum srv_admin { SRV_ADMF_IDRAIN = 0x10, /* the server has inherited the drain status from a tracked server */ SRV_ADMF_DRAIN = 0x18, /* mask to check if any drain flag is present */ SRV_ADMF_RMAINT = 0x20, /* the server is down because of an IP address resolution failure */ - SRV_ADMF_HMAINT = 0x40, /* the server FQDN has been set from socket stats */ - SRV_ADMF_MAINT = 0x63, /* mask to check if any maintenance flag except CMAINT is present */ + SRV_ADMF_MAINT = 0x23, /* mask to check if any maintenance flag except CMAINT is present */ + + SRV_ADMF_FQDN_CHANGED = 0x40, /* Special value: set (and never removed) if the server fqdn has + * changed (from cli or resolvers) since its initial value from + * config. This flag is exported and restored through state-file + */ } __attribute__((packed)); /* options for servers' "init-addr" parameter diff --git a/src/server.c b/src/server.c index fcd75c98c38e2..22e1dcc3f3af5 100644 --- a/src/server.c +++ b/src/server.c @@ -4766,8 +4766,8 @@ const char *srv_update_fqdn(struct server *server, const char *fqdn, const char goto out; } - /* Flag as FQDN set from stats socket. */ - server->next_admin |= SRV_ADMF_HMAINT; + /* Flag as FQDN changed (e.g.: set from stats socket or resolvers) */ + server->next_admin |= SRV_ADMF_FQDN_CHANGED; out: if (updater) diff --git a/src/server_state.c b/src/server_state.c index ebdcf3c69d00e..e6cff1877b71d 100644 --- a/src/server_state.c +++ b/src/server_state.c @@ -53,7 +53,7 @@ static void srv_state_srv_update(struct server *srv, int version, char **params) int srv_check_state, srv_agent_state; int bk_f_forced_id; int srv_f_forced_id; - int fqdn_set_by_cli; + int fqdn_changed; const char *fqdn; const char *port_st; unsigned int port_svc; @@ -112,12 +112,12 @@ static void srv_state_srv_update(struct server *srv, int version, char **params) p = NULL; errno = 0; srv_admin_state = strtol(params[2], &p, 10); - fqdn_set_by_cli = !!(srv_admin_state & SRV_ADMF_HMAINT); + fqdn_changed = !!(srv_admin_state & SRV_ADMF_FQDN_CHANGED); /* inherited statuses will be recomputed later. - * Also disable SRV_ADMF_HMAINT flag (set from stats socket fqdn). + * Also disable SRV_ADMF_FQDN_CHANGED flag (set from stats socket fqdn). */ - srv_admin_state &= ~SRV_ADMF_IDRAIN & ~SRV_ADMF_IMAINT & ~SRV_ADMF_HMAINT & ~SRV_ADMF_RMAINT; + srv_admin_state &= ~SRV_ADMF_IDRAIN & ~SRV_ADMF_IMAINT & ~SRV_ADMF_RMAINT & ~SRV_ADMF_FQDN_CHANGED; if ((p == params[2]) || errno == EINVAL || errno == ERANGE || (srv_admin_state != 0 && @@ -372,7 +372,7 @@ static void srv_state_srv_update(struct server *srv, int version, char **params) * So we must reset the 'set from stats socket FQDN' flag to be consistent with * any further FQDN modification. */ - srv->next_admin &= ~SRV_ADMF_HMAINT; + srv->next_admin &= ~SRV_ADMF_FQDN_CHANGED; } else { /* If the FDQN has been changed from stats socket, @@ -380,10 +380,10 @@ static void srv_state_srv_update(struct server *srv, int version, char **params) * from stats socket). * Also ensure the runtime resolver will process this resolution. */ - if (fqdn_set_by_cli) { + if (fqdn_changed) { srv_set_fqdn(srv, fqdn, 0); srv->flags &= ~SRV_F_NO_RESOLUTION; - srv->next_admin |= SRV_ADMF_HMAINT; + srv->next_admin |= SRV_ADMF_FQDN_CHANGED; } } }