]> 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)
committerMartin Schwenke <martins@samba.org>
Mon, 17 Sep 2018 20:58:20 +0000 (22:58 +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>
ctdb/server/ctdb_recoverd.c

index d64ab8e858a07ddc5c65382b35d654741bae3950..3578ccd3a8bee5463e10b1c259bf7f820644cbdb 100644 (file)
@@ -1327,6 +1327,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) {
                                        /*