From: Neha Ojha Date: Tue, 17 Jul 2018 01:01:26 +0000 (-0700) Subject: osd: reset complete_to when trimming the log past it X-Git-Tag: v12.2.9~134^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=715d1fdbfc407de81686784d99fe28b51c6d97ef;p=ceph.git osd: reset complete_to when trimming the log past it Signed-off-by: Neha Ojha (cherry picked from commit 38170cdb1b8c3ea7e8b411fabe1fe99abd06cf52) --- diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc index b3fc17a89702..b384a2cdd656 100644 --- a/src/osd/PGLog.cc +++ b/src/osd/PGLog.cc @@ -58,6 +58,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 @@ -91,6 +92,10 @@ 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(); @@ -98,6 +103,13 @@ void PGLog::IndexedLog::trim( } 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()) { @@ -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; } } diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 0d813c0ca5e4..8314edf1554d 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -10669,6 +10669,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