]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/pg: make clone object's version consistent with pglog 51639/head
authorXuehan Xu <xxhdx1985126@gmail.com>
Tue, 25 Apr 2023 06:21:07 +0000 (06:21 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Sun, 21 May 2023 09:37:23 +0000 (09:37 +0000)
Right now, the head object's version is 1 less than clone object's
version in the pg log; while it's exactly the other way around when
it comes to the versions recorded in the object info of head/clone
objects

Fixes: https://tracker.ceph.com/issues/59536
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
(cherry picked from commit 1fd6324bb8baaee4d413f188c78b821f84e5d4ff)

src/crimson/osd/ops_executer.cc
src/crimson/osd/ops_executer.h

index 6306a0ac1d73abafc06a8436f3ea1a2d2238aca2..b53fde2ea45c1488be5afc174045a7f61cfca295 100644 (file)
@@ -951,7 +951,7 @@ std::unique_ptr<OpsExecuter::CloningContext> OpsExecuter::execute_clone(
   cloning_ctx->log_entry = {
     pg_log_entry_t::CLONE,
     coid,
-    osd_op_params->at_version,
+    snap_oi.version,
     initial_obs.oi.version,
     initial_obs.oi.user_version,
     osd_reqid_t(),
@@ -965,12 +965,10 @@ std::unique_ptr<OpsExecuter::CloningContext> OpsExecuter::execute_clone(
 }
 
 void OpsExecuter::CloningContext::apply_to(
-  const eversion_t& at_version,
   std::vector<pg_log_entry_t>& log_entries,
   ObjectContext& processed_obc) &&
 {
   log_entry.mtime = processed_obc.obs.oi.mtime;
-  log_entry.version = at_version;
   log_entries.emplace_back(std::move(log_entry));
   processed_obc.ssc->snapset = std::move(new_snapset);
 }
@@ -985,11 +983,7 @@ OpsExecuter::flush_clone_metadata(
   assert(!txn.empty());
   auto maybe_snap_mapped = interruptor::now();
   if (cloning_ctx) {
-    osd_op_params->at_version = pg->next_version();
-    std::move(*cloning_ctx).apply_to(
-      osd_op_params->at_version,
-      log_entries,
-      *obc);
+    std::move(*cloning_ctx).apply_to(log_entries, *obc);
     const auto& coid = log_entries.back().soid;
     const auto& cloned_snaps = obc->ssc->snapset.clone_snaps[coid.snap];
     maybe_snap_mapped = snap_map_clone(
@@ -1019,7 +1013,7 @@ std::pair<object_info_t, ObjectContextRef> OpsExecuter::prepare_clone(
   const hobject_t& coid)
 {
   object_info_t static_snap_oi(coid);
-  static_snap_oi.version = osd_op_params->at_version;
+  static_snap_oi.version = pg->next_version();
   static_snap_oi.prior_version = obc->obs.oi.version;
   static_snap_oi.copy_user_bits(obc->obs.oi);
   if (static_snap_oi.is_whiteout()) {
index df0f67c3f945f1fca328e09145a277d7424af514..14b2881d695f8b234fef43f12bed44f98838713a 100644 (file)
@@ -190,7 +190,6 @@ private:
     pg_log_entry_t log_entry;
 
     void apply_to(
-      const eversion_t& at_version,
       std::vector<pg_log_entry_t>& log_entries,
       ObjectContext& processed_obc) &&;
   };