From 6d396a322e5ad61a3ca262b1c78a670481ff740c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 23 Sep 2015 10:58:01 -0400 Subject: [PATCH] mon/Elector: do a trivial write on every election cycle Currently we already do a small write when the *first* election in a round happens (to update the election epoch). If the backend happens to fail while we are already in the midst of elections, however, we may continue to call elections without verifying we are still writeable. Signed-off-by: Sage Weil (cherry picked from commit ef909ccbdc303cce8a39edef255325127832ff16) Conflicts: src/mon/Elector.cc no MonitorDBStore::TransactionRef in firefly --- src/mon/Elector.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/mon/Elector.cc b/src/mon/Elector.cc index 2ee10f7b9603..debe58c551ab 100644 --- a/src/mon/Elector.cc +++ b/src/mon/Elector.cc @@ -78,8 +78,15 @@ void Elector::start() init(); // start by trying to elect me - if (epoch % 2 == 0) + if (epoch % 2 == 0) { bump_epoch(epoch+1); // odd == election cycle + } else { + // do a trivial db write just to ensure it is writeable. + MonitorDBStore::Transaction t; + t.put(Monitor::MONITOR_NAME, "election_writeable_test", rand()); + int r = mon->store->apply_transaction(t); + assert(r >= 0); + } start_stamp = ceph_clock_now(g_ceph_context); electing_me = true; acked_me[mon->rank] = CEPH_FEATURES_ALL; -- 2.47.3