]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: resolvers: Add function to change the srv status based on SRV resolution
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 11 Mar 2021 17:03:21 +0000 (18:03 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 12 Mar 2021 16:41:28 +0000 (17:41 +0100)
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.

include/haproxy/server.h
src/server.c

index 04fd21a260cd554f3173a061655343433a423137..0bcae854539265bca3d4d58951c4ecd423bf79e3 100644 (file)
@@ -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);
index 412bd42e56141995e31c48532075f4fb5d93deb5..b8e935450ae864d5ecd3120b99fef2fb0a7e0a1c 100644 (file)
@@ -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: