IPALLOCATION : If the node is held pinned down in "init" state
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Wed, 12 Jan 2011 22:35:37 +0000 (09:35 +1100)
committerMichael Adam <obnox@samba.org>
Fri, 6 Jun 2014 13:00:37 +0000 (15:00 +0200)
by external services failing to start, or blocking CTDBD from finishing the startup phase,
we can encounter a situation where we have not yet fully initialized, but a
remote recovery master tries to release a certain ip clusterwide.

In this situation the node that is pinned down in init/startup phase
would fail to perform the release of the ip address since we are not yet fully operational and not yet host any valid interfaces.

In this situation, we just need to remain unhealthy, there is on need to
also ban the node.

Remove the autobanning for this condition and just let the node remain in
unhealthy mode.
Banning is overkill in this situation when the system is broken and just
draws attention to ctdbd instead of the root cause.
(cherry picked from commit d8af74e4c4961deb94c18dde8ba7fc07e944729c)

server/ctdb_takeover.c

index 2616955e113e90e23397e20239645d7d51077f6a..55913655c32f1efdb99698b575bd1d0cdf82fc5b 100644 (file)
@@ -603,10 +603,8 @@ int32_t ctdb_control_takeover_ip(struct ctdb_context *ctdb,
 
        if (vnn->iface == NULL && have_ip) {
                DEBUG(DEBUG_CRIT,(__location__ " takeoverip of IP %s is known to the kernel, "
-                                 "but we have no interface assigned, has someone manually configured it?"
-                                 "banning ourself\n",
+                                 "but we have no interface assigned, has someone manually configured it? Ignore for now.\n",
                                 ctdb_addr_to_str(&vnn->public_address)));
-               ctdb_ban_self(ctdb);
                return -1;
        }
 
@@ -803,12 +801,10 @@ int32_t ctdb_control_release_ip(struct ctdb_context *ctdb,
        }
 
        if (vnn->iface == NULL) {
-               DEBUG(DEBUG_CRIT,(__location__ " release_ip of IP %s is known to the kernel, "
-                                 "but we have no interface assigned, has someone manually configured it?"
-                                 "banning ourself\n",
+               DEBUG(DEBUG_ERR,(__location__ " release_ip of IP %s is known to the kernel, "
+                                "but we have no interface assigned, has someone manually configured it? Ignore for now.\n",
                                 ctdb_addr_to_str(&vnn->public_address)));
-               ctdb_ban_self(ctdb);
-               return -1;
+               return 0;
        }
 
        DEBUG(DEBUG_NOTICE,("Release of IP %s/%u on interface %s  node:%d\n",