From: Neha Ojha Date: Tue, 12 Feb 2019 01:21:53 +0000 (-0800) Subject: osd/PGLog: preserve original_crt in proc_replica_log() X-Git-Tag: v12.2.13~238^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6aa66573e7c4da6a48ecda7fafca06970e0b44b5;p=ceph.git osd/PGLog: preserve original_crt in proc_replica_log() This is to prevent rolling back further than deleted object version. Signed-off-by: Neha Ojha (cherry picked from commit cd25c1d79d189b4e0389927e7c20d75afd2661d9) --- diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc index 88fc1a2bcfc..439d0181b6b 100644 --- a/src/osd/PGLog.cc +++ b/src/osd/PGLog.cc @@ -257,6 +257,11 @@ void PGLog::proc_replica_log( limit : first_non_divergent->version; + // 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; IndexedLog folog(olog); auto divergent = folog.rewind_from_head(lu); _merge_divergent_entries( @@ -264,7 +269,7 @@ void PGLog::proc_replica_log( divergent, oinfo, olog.get_can_rollback_to(), - olog.get_can_rollback_to(), + original_crt, omissing, 0, this);