]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: OSDMonitor: smaller transactions when rebuilding full versions
authorJoao Eduardo Luis <joao.luis@inktank.com>
Sun, 15 Sep 2013 20:00:55 +0000 (21:00 +0100)
committerSage Weil <sage@inktank.com>
Mon, 23 Sep 2013 21:19:33 +0000 (14:19 -0700)
Otherwise, for considerably sized rebuilds, the monitor will not only
consume vast amounts of memory, but it will also have troubles committing
the transaction.  Anyway, it's also a good idea to adjust transactions to
the granularity we want, and to be fair we care that each rebuilt full map
gets to disk, even if subsequent full maps don't (those can be rebuilt
later).

Fixes: #6323
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
(cherry picked from commit 4ac1570c5cdcd6556dc291cc6d7878fd92d343ae)

src/mon/OSDMonitor.cc

index c3358f2162784e2a53ad9b15e4522a981a351641..930d9b285200dc4f11e28d5088cb0d25973faedd 100644 (file)
@@ -179,13 +179,13 @@ void OSDMonitor::update_from_paxos(bool *need_bootstrap)
   }
 
   // walk through incrementals
-  MonitorDBStore::Transaction t;
   while (version > osdmap.epoch) {
+    MonitorDBStore::Transaction t;
     bufferlist inc_bl;
     int err = get_version(osdmap.epoch+1, inc_bl);
     assert(err == 0);
     assert(inc_bl.length());
-    
+
     dout(7) << "update_from_paxos  applying incremental " << osdmap.epoch+1 << dendl;
     OSDMap::Incremental inc(inc_bl);
     err = osdmap.apply_incremental(inc);
@@ -202,9 +202,9 @@ void OSDMonitor::update_from_paxos(bool *need_bootstrap)
     if (osdmap.epoch == 1) {
       t.erase("mkfs", "osdmap");
     }
+    if (!t.empty())
+      mon->store->apply_transaction(t);
   }
-  if (!t.empty())
-    mon->store->apply_transaction(t);
 
   for (int o = 0; o < osdmap.get_max_osd(); o++) {
     if (osdmap.is_down(o)) {