]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/.../ops_executer: split osd_op_params intitialization
authorSamuel Just <sjust@redhat.com>
Thu, 14 Nov 2024 22:07:53 +0000 (14:07 -0800)
committerSamuel Just <sjust@redhat.com>
Fri, 13 Dec 2024 20:32:26 +0000 (12:32 -0800)
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 <sjust@redhat.com>
src/crimson/osd/ops_executer.cc
src/crimson/osd/ops_executer.h

index 59339d989be58681a3e8a9bdb21e6c5a8f4e0311..398f73f7c072141169485846ede6a0f08d925e38 100644 (file)
@@ -467,9 +467,7 @@ auto OpsExecuter::do_const_op(Func&& f) {
 template <class Func>
 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<Func>(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<pg_log_entry_t> 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<OSDOp>& ops,
   ceph::os::Transaction &txn)
index a6745ffaa4bcbf96cd7ec024804b0cfabc5125a2..9f9d4611e952a093fffadceebc034b254ac05d05 100644 (file)
@@ -393,11 +393,18 @@ public:
     const std::vector<OSDOp>& ops,
     SnapMapper& snap_mapper,
     OSDriver& osdriver);
-  void fill_op_params(modified_by m);
   pg_log_entry_t prepare_head_update(
     const std::vector<OSDOp>& 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;