From: Martin Schwenke Date: Sat, 8 Sep 2018 22:30:50 +0000 (+1000) Subject: ctdb-recoverd: Re-check master on failure to take recovery lock X-Git-Tag: samba-4.8.6~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9b1cc7afee8181844da94faeabcedc2140d10b89;p=thirdparty%2Fsamba.git ctdb-recoverd: Re-check master on failure to take recovery lock 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 Reviewed-by: Amitay Isaacs (cherry picked from commit c516e58ce92c420dc993bd9b7f1433641bd764bd) --- diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c index 28b5e2b6c2d..d89addb5f85 100644 --- a/ctdb/server/ctdb_recoverd.c +++ b/ctdb/server/ctdb_recoverd.c @@ -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) { /*