summaryrefslogtreecommitdiffstats
path: root/ctdb/server/ctdb_recoverd.c
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2013-09-03 11:21:09 +1000
committerAmitay Isaacs <amitay@gmail.com>2013-09-19 12:54:30 +1000
commitc503997746d74c50a6f1e92ad1210fb9c536149f (patch)
tree07aa408f6f6ea663bd22f6f67a57c8912a487f3d /ctdb/server/ctdb_recoverd.c
parentbbbb55eef959cba2cf25c0fc89d770530217434c (diff)
downloadsamba-c503997746d74c50a6f1e92ad1210fb9c536149f.tar.gz
samba-c503997746d74c50a6f1e92ad1210fb9c536149f.tar.xz
samba-c503997746d74c50a6f1e92ad1210fb9c536149f.zip
recoverd: Move disabling of IP checks into do_takeover_run()
Signed-off-by: Martin Schwenke <martin@meltin.net> (This used to be ctdb commit 48b603fbf16311daa47b01e7a33d477ed51da56d)
Diffstat (limited to 'ctdb/server/ctdb_recoverd.c')
-rw-r--r--ctdb/server/ctdb_recoverd.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c
index a94fb314313..2d01e050ab8 100644
--- a/ctdb/server/ctdb_recoverd.c
+++ b/ctdb/server/ctdb_recoverd.c
@@ -1584,6 +1584,8 @@ static bool do_takeover_run(struct ctdb_recoverd *rec,
struct ctdb_node_map *nodemap,
bool banning_credits_on_fail)
{
+ uint32_t disable_timeout;
+ TDB_DATA data;
int ret;
bool ok;
@@ -1594,10 +1596,34 @@ static bool do_takeover_run(struct ctdb_recoverd *rec,
goto done;
}
+ /* Disable IP checks while doing this takeover run. This will
+ * stop those other nodes from triggering takeover runs when
+ * think they should be hosting an IP but it isn't yet on an
+ * interface.
+ */
+ data.dptr = (uint8_t*)&disable_timeout;
+ data.dsize = sizeof(disable_timeout);
+
+ disable_timeout = rec->ctdb->tunable.takeover_timeout;
+ if (ctdb_client_send_message(rec->ctdb, CTDB_BROADCAST_CONNECTED,
+ CTDB_SRVID_DISABLE_IP_CHECK,
+ data) != 0) {
+ DEBUG(DEBUG_INFO,("Failed to disable IP check\n"));
+ }
+
rec->takeover_run_in_progress = true;
ret = ctdb_takeover_run(rec->ctdb, nodemap, takeover_fail_callback,
banning_credits_on_fail ? rec : NULL);
+
+ /* Reenable IP checks */
+ disable_timeout = 0;
+ if (ctdb_client_send_message(rec->ctdb, CTDB_BROADCAST_CONNECTED,
+ CTDB_SRVID_DISABLE_IP_CHECK,
+ data) != 0) {
+ DEBUG(DEBUG_INFO,("Failed to reenable IP check\n"));
+ }
+
if (ret != 0) {
DEBUG(DEBUG_ERR, ("IP reallocation failed\n"));
ok = false;