]> git.apps.os.sepia.ceph.com Git - ceph-ci.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)
committerNeha Ojha <nojha@redhat.com>
Mon, 25 Mar 2019 18:34:44 +0000 (11:34 -0700)
This is to prevent rolling back further than deleted object version.

Signed-off-by: Neha Ojha <nojha@redhat.com>
src/osd/PGLog.cc

index b0bf4deb5257ac1f399838712b7346eb12ca09a7..295019dc556f799fdff3f8cf649325df0461360d 100644 (file)
@@ -269,6 +269,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(
@@ -276,7 +281,7 @@ void PGLog::proc_replica_log(
     divergent,
     oinfo,
     olog.get_can_rollback_to(),
-    olog.get_can_rollback_to(),
+    original_crt,
     omissing,
     0,
     this);