summaryrefslogtreecommitdiffstats
path: root/ctdb/server/ctdb_recoverd.c
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2013-09-06 11:23:07 +1000
committerAmitay Isaacs <amitay@gmail.com>2013-09-19 12:54:31 +1000
commit566d66e6aba1536998bd94fe207a66c3a6936f52 (patch)
tree1c6a43cd05d1a4dc39dcaf0a0e09db95abc62ce1 /ctdb/server/ctdb_recoverd.c
parent4fb0d4a301d4409d125ccfb56f7d9ebba37095be (diff)
downloadsamba-566d66e6aba1536998bd94fe207a66c3a6936f52.tar.gz
samba-566d66e6aba1536998bd94fe207a66c3a6936f52.tar.xz
samba-566d66e6aba1536998bd94fe207a66c3a6936f52.zip
recoverd: Be careful about freeing the list of IP rebalance target nodes
It can change during a takeover run. If it does then don't free it. There are potentially fancier solutions (e.g. check what PNNs are new to the list) to this issue but this is the simplest. Signed-off-by: Martin Schwenke <martin@meltin.net> (This used to be ctdb commit e81589b7084c661adf617e166cc2c25b4939f841)
Diffstat (limited to 'ctdb/server/ctdb_recoverd.c')
-rw-r--r--ctdb/server/ctdb_recoverd.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c
index 527190d2383..14f1fa8cde3 100644
--- a/ctdb/server/ctdb_recoverd.c
+++ b/ctdb/server/ctdb_recoverd.c
@@ -1661,6 +1661,7 @@ static bool do_takeover_run(struct ctdb_recoverd *rec,
struct srvid_request dtr;
TDB_DATA data;
int i;
+ uint32_t *rebalance_nodes = rec->force_rebalance_nodes;
int ret;
bool ok;
@@ -1731,7 +1732,12 @@ static bool do_takeover_run(struct ctdb_recoverd *rec,
ok = true;
/* Takeover run was successful so clear force rebalance targets */
- TALLOC_FREE(rec->force_rebalance_nodes);
+ if (rebalance_nodes == rec->force_rebalance_nodes) {
+ TALLOC_FREE(rec->force_rebalance_nodes);
+ } else {
+ DEBUG(DEBUG_WARNING,
+ ("Rebalance target nodes changed during takeover run - not clearing\n"));
+ }
done:
rec->need_takeover_run = !ok;
talloc_free(nodes);