]> git.apps.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>
Wed, 17 Apr 2019 00:01:15 +0000 (20:01 -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 278c1720e337433ead1c449845262cfbbda3dbe0..c3664196be8a1ad479950743f55e382fc2277695 100644 (file)
@@ -255,6 +255,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(
@@ -262,7 +267,7 @@ void PGLog::proc_replica_log(
     divergent,
     oinfo,
     olog.get_can_rollback_to(),
-    olog.get_can_rollback_to(),
+    original_crt,
     omissing,
     0,
     this);