]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PGLog: preserve original_crt in proc_replica_log()
authorNeha Ojha <nojha@redhat.com>
Tue, 12 Feb 2019 01:21:53 +0000 (17:21 -0800)
committerPrashant D <pdhange@redhat.com>
Mon, 29 Apr 2019 07:02:12 +0000 (03:02 -0400)
This is to prevent rolling back further than deleted object version.

Signed-off-by: Neha Ojha <nojha@redhat.com>
(cherry picked from commit cd25c1d79d189b4e0389927e7c20d75afd2661d9)

src/osd/PGLog.cc

index 88fc1a2bcfc5d0b5680839db6da5102d206f456d..439d0181b6b23e1087b84f21c82c16ae2951087a 100644 (file)
@@ -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);