ctdb-ipalloc: Optimise check to see if IPs can be hosted
authorMartin Schwenke <martin@meltin.net>
Mon, 12 Sep 2016 05:51:58 +0000 (15:51 +1000)
committerMartin Schwenke <martins@samba.org>
Wed, 14 Sep 2016 06:39:29 +0000 (08:39 +0200)
Add an early return if there are no known IP addresses.

Also add an extra comment for clarification.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12254

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/server/ipalloc.c

index ccd12e77b284051aade23e9380af391bf633dd1f..ffec5e93ce0d0102c456cd8830717857db4c0d77 100644 (file)
@@ -245,12 +245,14 @@ bool ipalloc_set_public_ips(struct ipalloc_state *ipalloc_state,
 bool ipalloc_can_host_ips(struct ipalloc_state *ipalloc_state)
 {
        int i;
+       bool have_ips = false;
 
        for (i=0; i < ipalloc_state->num; i++) {
                struct ctdb_public_ip_list *ips =
                        ipalloc_state->known_public_ips;
                if (ips[i].num != 0) {
                        int j;
+                       have_ips = true;
                        /* Succeed if an address is hosted on node i */
                        for (j=0; j < ips[i].num; j++) {
                                if (ips[i].ip[j].pnn == i) {
@@ -260,6 +262,14 @@ bool ipalloc_can_host_ips(struct ipalloc_state *ipalloc_state)
                }
        }
 
+       if (! have_ips) {
+               return false;
+       }
+
+       /* At this point there are known addresses but none are
+        * hosted.  Need to check if cluster can now host some
+        * addresses.
+        */
        for (i=0; i < ipalloc_state->num; i++) {
                if (ipalloc_state->available_public_ips[i].num != 0) {
                        return true;