Skip to content

Commit

Permalink
osd: reset complete_to when trimming the log past it
Browse files Browse the repository at this point in the history
Signed-off-by: Neha Ojha <nojha@redhat.com>
(cherry picked from commit 38170cd)
  • Loading branch information
neha-ojha committed Aug 2, 2018
1 parent e2dd5e0 commit ac7e9cd
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/osd/PGLog.cc
Expand Up @@ -59,6 +59,7 @@ void PGLog::IndexedLog::trim(
}

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
Expand Down Expand Up @@ -92,13 +93,24 @@ void PGLog::IndexedLog::trim(
}
}

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();
rollback_info_trimmed_to_riter = log.rend();
} 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()) {
Expand Down Expand Up @@ -177,6 +189,7 @@ void PGLog::trim(
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;
}
}

Expand Down
2 changes: 2 additions & 0 deletions src/osd/PrimaryLogPG.cc
Expand Up @@ -11442,6 +11442,8 @@ void PrimaryLogPG::_applied_recovered_object_replica()
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
Expand Down

0 comments on commit ac7e9cd

Please sign in to comment.