diff options
author | Joao Eduardo Luis <joao.luis@inktank.com> | 2013-09-15 21:00:55 +0100 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-09-23 14:19:33 -0700 |
commit | 9b9edb04581cca15e67c567332529f5b3f426743 (patch) | |
tree | f0d59bbf58cd399d0f210f9fbbdefb144234452b | |
parent | 298811f7a15541b9ec1015c416ad2aa075be5691 (diff) | |
download | ceph-9b9edb04581cca15e67c567332529f5b3f426743.tar.gz |
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 <joao.luis@inktank.com>
(cherry picked from commit 4ac1570c5cdcd6556dc291cc6d7878fd92d343ae)
-rw-r--r-- | src/mon/OSDMonitor.cc | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index c3358f21627..930d9b28520 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)) { |