summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoao Eduardo Luis <joao.luis@inktank.com>2013-09-15 21:00:55 +0100
committerSage Weil <sage@inktank.com>2013-09-23 14:19:33 -0700
commit9b9edb04581cca15e67c567332529f5b3f426743 (patch)
treef0d59bbf58cd399d0f210f9fbbdefb144234452b
parent298811f7a15541b9ec1015c416ad2aa075be5691 (diff)
downloadceph-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.cc8
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)) {