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 <sage@redhat.com>
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::TransactionRef t(new MonitorDBStore::Transaction);
+ 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;