summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2022-01-21 18:09:47 +1100
committerJule Anger <janger@samba.org>2022-02-15 09:01:14 +0000
commit07540a8cf4597f683e6661cc4418b858f59d7312 (patch)
tree98928d6ec9ce8299aa2e535b4ec255367d8259b9
parentcaa6785eff0dee455f2f9a0125f9a6c069b2cadd (diff)
downloadsamba-07540a8cf4597f683e6661cc4418b858f59d7312.tar.gz
ctdb-recoverd: Always cancel election in progress
Election-in-progress is set by unknown leader broadcast, so needs to be cleared in all cases when election completes. This was seen in a case where the leader node stalled, so didn't send leader broadcasts for some time. The node continued to hold the cluster lock, so another node could not become leader. However, after the node returned to normal it still did not send leader broadcasts because election-in-progress was never cleared. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14958 Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com> (cherry picked from commit 188a9021565bc2c1bec1d7a4830d6f47cdbc44a9)
-rw-r--r--ctdb/server/ctdb_recoverd.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c
index cc239959c56..7a13339bf37 100644
--- a/ctdb/server/ctdb_recoverd.c
+++ b/ctdb/server/ctdb_recoverd.c
@@ -1836,7 +1836,7 @@ static void cluster_lock_election(struct ctdb_recoverd *rec)
if (cluster_lock_held(rec)) {
cluster_lock_release(rec);
}
- return;
+ goto done;
}
/*
@@ -1844,7 +1844,7 @@ static void cluster_lock_election(struct ctdb_recoverd *rec)
* attempt to retake it. This provides stability.
*/
if (cluster_lock_held(rec)) {
- return;
+ goto done;
}
rec->leader = CTDB_UNKNOWN_PNN;
@@ -1856,6 +1856,7 @@ static void cluster_lock_election(struct ctdb_recoverd *rec)
D_WARNING("Took cluster lock, leader=%"PRIu32"\n", rec->leader);
}
+done:
rec->election_in_progress = false;
}