From 38170cdb1b8c3ea7e8b411fabe1fe99abd06cf52 Mon Sep 17 00:00:00 2001 From: Neha Ojha Date: Mon, 16 Jul 2018 18:01:26 -0700 Subject: [PATCH] osd: reset complete_to when trimming the log past it Signed-off-by: Neha Ojha --- src/osd/PGLog.cc | 13 +++++++++++++ src/osd/PrimaryLogPG.cc | 2 ++ 2 files changed, 15 insertions(+) diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc index 7bad3503ce8f6..9a5fba5bd5978 100644 --- a/src/osd/PGLog.cc +++ b/src/osd/PGLog.cc @@ -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 @@ -92,6 +93,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(); @@ -99,6 +104,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 47e4a72a30ffc..15cc5b86934b5 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -11488,6 +11488,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 -- 2.39.5