ctdb-recoverd: Take cluster lock when election completes
authorMartin Schwenke <martin@meltin.net>
Thu, 20 Sep 2018 04:13:58 +0000 (14:13 +1000)
committerMartin Schwenke <martins@samba.org>
Mon, 17 Jan 2022 10:21:33 +0000 (10:21 +0000)
It is no longer just a recovery lock but is always held by the cluster
leader.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/server/ctdb_recoverd.c

index 0bd085df9b86a7b6bf661d3e175ea2d95624f773..6931e2de86591618bbab1506d647eb54427e3487 100644 (file)
@@ -653,11 +653,23 @@ static void ctdb_election_timeout(struct tevent_context *ev,
                                  struct timeval t, void *p)
 {
        struct ctdb_recoverd *rec = talloc_get_type(p, struct ctdb_recoverd);
+       bool ok;
+
        rec->election_in_progress = false;
        rec->election_timeout = NULL;
        fast_start = false;
 
        D_WARNING("Election period ended, leader=%u\n", rec->leader);
+
+       if (!this_node_is_leader(rec)) {
+               return;
+       }
+
+       ok = cluster_lock_take(rec);
+       if (!ok) {
+               D_ERR("Unable to get cluster lock, banning node\n");
+               ctdb_ban_node(rec, rec->pnn);
+       }
 }