ctdb-takeover: Inform clients when dropping all IP addresses
authorAmitay Isaacs <amitay@gmail.com>
Sat, 5 Mar 2016 03:05:21 +0000 (14:05 +1100)
committerKarolin Seeger <kseeger@samba.org>
Tue, 13 Sep 2016 10:27:28 +0000 (12:27 +0200)
CTDB releases all IPs in following cases: starting up, shutting down,
node gets banned, node does not come out of recovery for a long time.
Always inform samba when CTDB releases IP addresses.

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

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
(cherry picked from commit 00b9e76904bb1108e0f06d0dba4df89394d58252)

ctdb/server/ctdb_takeover.c

index b32772f88cdad4cb0ae602b8319e326d7c3cc88e..916f82c9fa07621cfb195ea452b0283cc4e3c76f 100644 (file)
@@ -2337,6 +2337,7 @@ void ctdb_release_all_ips(struct ctdb_context *ctdb)
 {
        struct ctdb_vnn *vnn;
        int count = 0;
+       TDB_DATA data;
 
        if (ctdb->tunable.disable_ip_failover == 1) {
                return;
@@ -2374,6 +2375,16 @@ void ctdb_release_all_ips(struct ctdb_context *ctdb)
                                  ctdb_vnn_iface_string(vnn),
                                  ctdb_addr_to_str(&vnn->public_address),
                                  vnn->public_netmask_bits);
+
+               data.dptr = (uint8_t *)talloc_strdup(
+                               vnn, ctdb_addr_to_str(&vnn->public_address));
+               if (data.dptr != NULL) {
+                       data.dsize = strlen((char *)data.dptr) + 1;
+                       ctdb_daemon_send_message(ctdb, ctdb->pnn,
+                                                CTDB_SRVID_RELEASE_IP, data);
+                       talloc_free(data.dptr);
+               }
+
                ctdb_vnn_unassign_iface(ctdb, vnn);
                vnn->update_in_flight = false;
                count++;