}
assert(s <= can_rollback_to);
+ generic_dout(0) << " complete_to " << complete_to->version << dendl;
auto earliest_dup_version =
log.rbegin()->version.version < cct->_conf->osd_pg_log_dups_tracked
}
}
+ bool reset_complete_to = false;
+ // we are trimming past complete_to, so reset complete_to
+ if (e.version >= complete_to->version)
+ reset_complete_to = true;
if (rollback_info_trimmed_to_riter == log.rend() ||
e.version == rollback_info_trimmed_to_riter->version) {
log.pop_front();
} else {
log.pop_front();
}
+
+ // reset complete_to to the beginning of the log
+ if (reset_complete_to) {
+ generic_dout(0) << " moving complete_to " << " to "
+ << log.begin()->version << dendl;
+ complete_to = log.begin();
+ }
}
while (!dups.empty()) {
dout(10) << "trim " << log << " to " << trim_to << dendl;
log.trim(cct, trim_to, &trimmed, &trimmed_dups, &write_from_dups);
info.log_tail = log.tail;
+ dout(10) << " after trim complete_to " << log.complete_to->version << dendl;
}
}
void PrimaryLogPG::recover_got(hobject_t oid, eversion_t v)
{
dout(10) << "got missing " << oid << " v " << v << dendl;
+ dout(10) << __func__ << " complete_to "
+ << pg_log.get_log().complete_to->version << dendl;
pg_log.recover_got(oid, v, info);
if (pg_log.get_log().complete_to != pg_log.get_log().log.end()) {
dout(10) << "last_complete now " << info.last_complete