]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/pg: make clone object's version consistent with pglog 51202/head
authorXuehan Xu <xxhdx1985126@gmail.com>
Tue, 25 Apr 2023 06:21:07 +0000 (06:21 +0000)
committerXuehan Xu <xxhdx1985126@gmail.com>
Tue, 25 Apr 2023 06:46:12 +0000 (06:46 +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>
src/crimson/osd/ops_executer.cc
src/crimson/osd/ops_executer.h

index ac6c99d8d8189f57f3145994a389e9d96f05ceb9..040870203bd950ea0d4785a0eeb127a6224d0c09 100644 (file)
@@ -950,7 +950,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(),
@@ -964,12 +964,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);
 }
@@ -984,11 +982,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(
@@ -1018,7 +1012,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 f5a1ed71bafb0cf26dea0cafb9fd65b3c6560ffc..697adffdb2184f92a039ce47ff23cb66498dbb07 100644 (file)
@@ -187,7 +187,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) &&;
   };