From: Martin Schwenke Date: Mon, 4 May 2020 07:45:51 +0000 (+1000) Subject: ctdb-recoverd: No longer take cluster lock during recovery X-Git-Tag: tdb-1.4.6~117 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=358c59f51ab39175ffe72afdfc4c2e0ed23b5929;p=thirdparty%2Fsamba.git ctdb-recoverd: No longer take cluster lock during recovery Confirm instead that it is already held. Signed-off-by: Martin Schwenke Reviewed-by: Amitay Isaacs --- 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));