From 62b8491c5ff81fdc9154a1c073c80bf881a74e6b Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 14 Nov 2024 14:07:53 -0800 Subject: [PATCH] crimson/.../ops_executer: split osd_op_params intitialization We want to emplace and initialize osd_op_params upon first write, but we don't want to fill at_version, pg_trim_to, pg_committed_to, or last_complete until prepare_transaction because we don't want to require a particular commit order any earlier than we have to. Signed-off-by: Samuel Just --- src/crimson/osd/ops_executer.cc | 21 ++++++--------------- src/crimson/osd/ops_executer.h | 9 ++++++++- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index 59339d989be..398f73f7c07 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -467,9 +467,7 @@ auto OpsExecuter::do_const_op(Func&& f) { template auto OpsExecuter::do_write_op(Func&& f, OpsExecuter::modified_by m) { ++num_write; - if (!osd_op_params) { - fill_op_params(m); - } + check_init_op_params(m); return std::forward(f)(pg->get_backend(), obc->obs, txn); } OpsExecuter::call_errorator::future<> OpsExecuter::do_assert_ver( @@ -844,6 +842,11 @@ OpsExecuter::flush_changes_and_submit( apply_stats(); if (want_mutate) { + osd_op_params->at_version = pg->get_next_version(); + osd_op_params->pg_trim_to = pg->get_pg_trim_to(); + osd_op_params->pg_committed_to = pg->get_pg_committed_to(); + osd_op_params->last_complete = pg->get_info().last_complete; + std::vector log_entries; if (cloning_ctx) { @@ -897,18 +900,6 @@ OpsExecuter::flush_changes_and_submit( std::move(all_completed)); } -void OpsExecuter::fill_op_params(OpsExecuter::modified_by m) -{ - osd_op_params.emplace(); - osd_op_params->req_id = msg->get_reqid(); - osd_op_params->mtime = msg->get_mtime(); - osd_op_params->at_version = pg->get_next_version(); - osd_op_params->pg_trim_to = pg->get_pg_trim_to(); - osd_op_params->pg_committed_to = pg->get_pg_committed_to(); - osd_op_params->last_complete = pg->get_info().last_complete; - osd_op_params->user_modify = (m == modified_by::user); -} - pg_log_entry_t OpsExecuter::prepare_head_update( const std::vector& ops, ceph::os::Transaction &txn) diff --git a/src/crimson/osd/ops_executer.h b/src/crimson/osd/ops_executer.h index a6745ffaa4b..9f9d4611e95 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -393,11 +393,18 @@ public: const std::vector& ops, SnapMapper& snap_mapper, OSDriver& osdriver); - void fill_op_params(modified_by m); pg_log_entry_t prepare_head_update( const std::vector& ops, ceph::os::Transaction &txn); + void check_init_op_params(OpsExecuter::modified_by m) { + if (!osd_op_params) { + osd_op_params.emplace(); + osd_op_params->req_id = msg->get_reqid(); + osd_op_params->mtime = msg->get_mtime(); + osd_op_params->user_modify = (m == modified_by::user); + } + } ObjectContextRef get_obc() const { return obc; -- 2.39.5