]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd/ops_executor: only increment osd_op_params_t::at_version for clone
authorSamuel Just <sjust@redhat.com>
Thu, 9 May 2024 03:39:18 +0000 (20:39 -0700)
committerMatan Breizman <mbreizma@redhat.com>
Tue, 18 Jun 2024 07:27:14 +0000 (10:27 +0300)
Previously, we incremented prior to usage in both prepare_transaction
and execute_clone.  Because at_version is initialized from
PG::get_next_version(), this results in log entries skipping
values.  Instead, only increment after populating clone
object_info.

Signed-off-by: Samuel Just <sjust@redhat.com>
(cherry picked from commit 7e0dde721d5203623b06351bb4b261b3c9fe2c33)

src/crimson/osd/ops_executer.cc

index d170300379f646e0f1a304df0cf675d4dfc5afde..f7aedf925a40727b0ca8559cf2852f63de5eb49b 100644 (file)
@@ -819,7 +819,6 @@ std::vector<pg_log_entry_t> OpsExecuter::prepare_transaction(
   // entry.
   assert(obc->obs.oi.soid.snap >= CEPH_MAXSNAP);
   std::vector<pg_log_entry_t> log_entries;
-  osd_op_params->at_version.version++;
   log_entries.emplace_back(
     obc->obs.exists ?
       pg_log_entry_t::MODIFY : pg_log_entry_t::DELETE,
@@ -931,8 +930,8 @@ std::unique_ptr<OpsExecuter::CloningContext> OpsExecuter::execute_clone(
     return std::vector<snapid_t>{std::begin(snapc.snaps), last};
   }();
 
-  osd_op_params->at_version.version++;
   auto clone_obc = prepare_clone(coid, osd_op_params->at_version);
+  osd_op_params->at_version.version++;
 
   // make clone
   backend.clone(clone_obc->obs.oi, initial_obs, clone_obc->obs, txn);