dout(10) << "merge_log extending tail to " << olog.tail << dendl;
list<pg_log_entry_t>::iterator from = olog.log.begin();
list<pg_log_entry_t>::iterator to;
+ eversion_t last;
for (to = from;
to != olog.log.end();
++to) {
break;
log.index(*to);
dout(15) << *to << dendl;
+ last = to->version;
}
-
- if (to == olog.log.end())
- mark_dirty_to(oinfo.last_update);
- else
- mark_dirty_to(to->version);
+ mark_dirty_to(last);
+
// splice into our log.
log.log.splice(log.log.begin(),
olog.log, from, to);
}
for (list<pg_log_entry_t>::iterator p = log.log.begin();
- p != log.log.end() && p->version < dirty_to;
+ p != log.log.end() && p->version <= dirty_to;
++p) {
bufferlist bl(sizeof(*p) * 2);
p->encode_with_checksum(bl);
/// Log is clean on [dirty_to, dirty_from)
bool touched_log;
- eversion_t dirty_to; ///< must clear/writeout all keys up to dirty_to
- eversion_t dirty_from; ///< must clear/writeout all keys past dirty_from
- eversion_t writeout_from; ///< must writout keys past writeout_from
+ eversion_t dirty_to; ///< must clear/writeout all keys <= dirty_to
+ eversion_t dirty_from; ///< must clear/writeout all keys >= dirty_from
+ eversion_t writeout_from; ///< must writout keys >= writeout_from
set<eversion_t> trimmed; ///< must clear keys in trimmed
bool dirty_divergent_priors;
CephContext *cct;