From: Christopher Faulet Date: Thu, 11 Mar 2021 17:03:21 +0000 (+0100) Subject: MINOR: resolvers: Add function to change the srv status based on SRV resolution X-Git-Tag: v2.4-dev12~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5efdef24c1753d7a68d1f6c8dc8cb6b4b84a3361;p=thirdparty%2Fhaproxy.git MINOR: resolvers: Add function to change the srv status based on SRV resolution srvrq_update_srv_status() update the server status based on result of SRV resolution. For now, it is only used from snr_update_srv_status() when appropriate. --- diff --git a/include/haproxy/server.h b/include/haproxy/server.h index 04fd21a260..0bcae85453 100644 --- a/include/haproxy/server.h +++ b/include/haproxy/server.h @@ -62,6 +62,7 @@ struct server *new_server(struct proxy *proxy); /* functions related to server name resolution */ int srv_prepare_for_resolution(struct server *srv, const char *hostname); +int srvrq_update_srv_status(struct server *s, int has_no_ip); int snr_update_srv_status(struct server *s, int has_no_ip); int srv_set_fqdn(struct server *srv, const char *fqdn, int resolv_locked); const char *srv_update_fqdn(struct server *server, const char *fqdn, const char *updater, int dns_locked); diff --git a/src/server.c b/src/server.c index 412bd42e56..b8e935450a 100644 --- a/src/server.c +++ b/src/server.c @@ -2990,6 +2990,31 @@ out: return msg->area; } +/* + * update server status based on result of SRV resolution + * returns: + * 0 if server status is updated + * 1 if server status has not changed + * + * Must be called with the server lock held. + */ +int srvrq_update_srv_status(struct server *s, int has_no_ip) +{ + if (!s->srvrq) + return 1; + + /* since this server has an IP, it can go back in production */ + if (has_no_ip == 0) { + srv_clr_admin_flag(s, SRV_ADMF_RMAINT); + return 1; + } + + if (s->next_admin & SRV_ADMF_RMAINT) + return 1; + + srv_set_admin_flag(s, SRV_ADMF_RMAINT, "entry removed from SRV record"); + return 0; +} /* * update server status based on result of name resolution @@ -3006,19 +3031,8 @@ int snr_update_srv_status(struct server *s, int has_no_ip) int exp; /* If resolution is NULL we're dealing with SRV records Additional records */ - if (resolution == NULL) { - /* since this server has an IP, it can go back in production */ - if (has_no_ip == 0) { - srv_clr_admin_flag(s, SRV_ADMF_RMAINT); - return 1; - } - - if (s->next_admin & SRV_ADMF_RMAINT) - return 1; - - srv_set_admin_flag(s, SRV_ADMF_RMAINT, "entry removed from SRV record"); - return 0; - } + if (resolution == NULL) + return srvrq_update_srv_status(s, has_no_ip); switch (resolution->status) { case RSLV_STATUS_NONE: