]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ctdb: Fix a stuck cluster lock holder after a delayed leader bcast
authorVolker Lendecke <vl@samba.org>
Wed, 6 Aug 2025 13:28:29 +0000 (15:28 +0200)
committerMartin Schwenke <martins@samba.org>
Thu, 7 Aug 2025 02:59:20 +0000 (02:59 +0000)
If a delayed broadcast by a previous cluster lock holder arrives, the
new legitimate leader will accept this without questioning in
leader_handler(). Without this patch rec->leader will never be
overwritten, and because rec->pnn != rec->leader we'll also never send
out fresh leader broadcasts. And because we hold the cluster lock,
nobody else can step up.

Fix this in the next round of leader broadcast timeout.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=15892
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Martin Schwenke <martin@meltin.net>
Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Thu Aug  7 02:59:20 UTC 2025 on atb-devel-224

ctdb/server/ctdb_recoverd.c

index 11644868e461e4baab2031e2c13574f2d679171d..edc89754c2c80c65fe4132677e1a3ba08efa92cf 100644 (file)
@@ -1902,6 +1902,7 @@ static void cluster_lock_election(struct ctdb_recoverd *rec)
         * attempt to retake it.  This provides stability.
         */
        if (cluster_lock_held(rec)) {
+               rec->leader = rec->pnn;
                goto done;
        }