From: Joao Eduardo Luis Date: Sun, 15 Sep 2013 20:00:55 +0000 (+0100) Subject: mon: OSDMonitor: smaller transactions when rebuilding full versions X-Git-Tag: v0.67.4~23 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=9b9edb04581cca15e67c567332529f5b3f426743;p=ceph.git mon: OSDMonitor: smaller transactions when rebuilding full versions 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 (cherry picked from commit 4ac1570c5cdcd6556dc291cc6d7878fd92d343ae) --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index c3358f2162784..930d9b285200d 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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)) {