From: Xuehan Xu Date: Tue, 25 Apr 2023 06:21:07 +0000 (+0000) Subject: crimson/osd/pg: make clone object's version consistent with pglog X-Git-Tag: v19.0.0~1309^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1fd6324bb8baaee4d413f188c78b821f84e5d4ff;p=ceph.git crimson/osd/pg: make clone object's version consistent with pglog 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 --- diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index ac6c99d8d818..040870203bd9 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -950,7 +950,7 @@ std::unique_ptr 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::execute_clone( } void OpsExecuter::CloningContext::apply_to( - const eversion_t& at_version, std::vector& 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 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()) { diff --git a/src/crimson/osd/ops_executer.h b/src/crimson/osd/ops_executer.h index f5a1ed71bafb..697adffdb218 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -187,7 +187,6 @@ private: pg_log_entry_t log_entry; void apply_to( - const eversion_t& at_version, std::vector& log_entries, ObjectContext& processed_obc) &&; };