From: Neha Ojha Date: Mon, 25 Mar 2019 21:48:04 +0000 (-0700) Subject: osd/PGLog: preserve original_crt in merge_log() X-Git-Tag: v15.0.0~61^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F27200%2Fhead;p=ceph.git osd/PGLog: preserve original_crt in merge_log() Fixes: https://tracker.ceph.com/issues/21174 Signed-off-by: Neha Ojha --- diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc index 295019dc556..bd9cbc1b71b 100644 --- a/src/osd/PGLog.cc +++ b/src/osd/PGLog.cc @@ -444,6 +444,11 @@ void PGLog::merge_log(pg_info_t &oinfo, pg_log_t &olog, pg_shard_t fromosd, << lower_bound << dendl; mark_dirty_from(lower_bound); + // We need to preserve the original crt before it gets updated in rewind_from_head(). + // Later, in merge_object_divergent_entries(), we use it to check whether we can rollback + // a divergent entry or not. + eversion_t original_crt = log.get_can_rollback_to(); + dout(20) << __func__ << " original_crt = " << original_crt << dendl; auto divergent = log.rewind_from_head(lower_bound); // move aside divergent items for (auto &&oe: divergent) { @@ -468,7 +473,7 @@ void PGLog::merge_log(pg_info_t &oinfo, pg_log_t &olog, pg_shard_t fromosd, divergent, info, log.get_can_rollback_to(), - log.get_can_rollback_to(), + original_crt, missing, rollbacker, this); diff --git a/src/osd/PGLog.h b/src/osd/PGLog.h index 862ca5f4139..6b492785e9e 100644 --- a/src/osd/PGLog.h +++ b/src/osd/PGLog.h @@ -1031,6 +1031,9 @@ protected: ldpp_dout(dpp, 10) << __func__ << ": hoid " << hoid << " olog_can_rollback_to: " << olog_can_rollback_to << dendl; + ldpp_dout(dpp, 10) << __func__ << ": hoid " << hoid + << " original_crt: " + << original_can_rollback_to << dendl; /// Distinguish between 4) and 5) for (list::const_reverse_iterator i = entries.rbegin(); i != entries.rend();