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)
}
// 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);
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)) {