]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ctdb-recoverd: Re-check master on failure to take recovery lock
authorMartin Schwenke <martin@meltin.net>
Sat, 8 Sep 2018 22:30:50 +0000 (08:30 +1000)
committerKarolin Seeger <kseeger@samba.org>
Thu, 20 Sep 2018 07:13:12 +0000 (09:13 +0200)
If the master changed while trying to take the lock then fail gracefully.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13617

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
(cherry picked from commit c516e58ce92c420dc993bd9b7f1433641bd764bd)

ctdb/server/ctdb_recoverd.c

index 28b5e2b6c2d55842e532c5003416b501bdd776eb..d89addb5f85a84fff5bc25c0136b6743ab77a28d 100644 (file)
@@ -1317,6 +1317,15 @@ static int do_recovery(struct ctdb_recoverd *rec,
                        ok = ctdb_recovery_lock(rec);
                        if (! ok) {
                                D_ERR("Unable to take recovery lock\n");
+
+                               if (pnn != rec->recmaster) {
+                                       D_NOTICE("Recovery master changed to %u,"
+                                                " aborting recovery\n",
+                                                rec->recmaster);
+                                       rec->need_recovery = false;
+                                       goto fail;
+                               }
+
                                if (ctdb->runstate ==
                                    CTDB_RUNSTATE_FIRST_RECOVERY) {
                                        /*