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: mark-v0.70-wip~27^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4ac1570c5cdcd6556dc291cc6d7878fd92d343ae;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 --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 85dcf576271b..3f45a18111a2 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)) {