summaryrefslogtreecommitdiff
path: root/ctdb/server
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2020-05-04 17:45:51 +1000
committerMartin Schwenke <martins@samba.org>2022-01-17 10:21:33 +0000
commit358c59f51ab39175ffe72afdfc4c2e0ed23b5929 (patch)
treeaedf7a6a0227a9f04564c074caf62ab5364ba932 /ctdb/server
parent36ffaaa691c63896b7b92628b147b7a564421311 (diff)
downloadsamba-358c59f51ab39175ffe72afdfc4c2e0ed23b5929.tar.gz
ctdb-recoverd: No longer take cluster lock during recovery
Confirm instead that it is already held. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Diffstat (limited to 'ctdb/server')
-rw-r--r--ctdb/server/ctdb_recoverd.c27
1 files changed, 10 insertions, 17 deletions
diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c
index f7572bfa5c9..9a1a2b9ca1c 100644
--- a/ctdb/server/ctdb_recoverd.c
+++ b/ctdb/server/ctdb_recoverd.c
@@ -1286,25 +1286,18 @@ static int do_recovery(struct ctdb_recoverd *rec, TALLOC_CTX *mem_ctx)
goto fail;
}
- if (cluster_lock_enabled(rec)) {
- bool ok;
-
- ok = cluster_lock_take(rec);
- if (!ok) {
- D_ERR("Unable to take recovery lock\n");
-
- if (!this_node_is_leader(rec)) {
- D_NOTICE("Leader changed to %u,"
- " aborting recovery\n",
- rec->leader);
- rec->need_recovery = false;
- goto fail;
- }
-
- D_ERR("Abort recovery, ban this node\n");
- ctdb_ban_node(rec, rec->pnn);
+ if (cluster_lock_enabled(rec) && !cluster_lock_held(rec)) {
+ /* Leader can change in ban_misbehaving_nodes() */
+ if (!this_node_is_leader(rec)) {
+ D_NOTICE("Leader changed to %u, aborting recovery\n",
+ rec->leader);
+ rec->need_recovery = false;
goto fail;
}
+
+ D_ERR("Cluster lock not held - abort recovery, ban node\n");
+ ctdb_ban_node(rec, rec->pnn);
+ goto fail;
}
DEBUG(DEBUG_NOTICE, (__location__ " Recovery initiated due to problem with node %u\n", rec->last_culprit_node));