diff options
author | Martin Schwenke <martin@meltin.net> | 2020-05-04 17:45:51 +1000 |
---|---|---|
committer | Martin Schwenke <martins@samba.org> | 2022-01-17 10:21:33 +0000 |
commit | 358c59f51ab39175ffe72afdfc4c2e0ed23b5929 (patch) | |
tree | aedf7a6a0227a9f04564c074caf62ab5364ba932 /ctdb | |
parent | 36ffaaa691c63896b7b92628b147b7a564421311 (diff) | |
download | samba-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')
-rw-r--r-- | ctdb/server/ctdb_recoverd.c | 27 |
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)); |