]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/Elector: do a trivial write on every election cycle 6040/head
authorSage Weil <sage@redhat.com>
Wed, 23 Sep 2015 14:58:01 +0000 (10:58 -0400)
committerSage Weil <sage@redhat.com>
Wed, 23 Sep 2015 14:58:15 +0000 (10:58 -0400)
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>
src/mon/Elector.cc

index 5b1ef4e207a0fc891f1c18e10cdeb8ff4fc52b96..3bec0effa58ac01a278add6814112ce775780507 100644 (file)
@@ -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::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;