]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: PG::do_osd_ops_execute() doesn't depend on MOSDOp anymore.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 23 Mar 2021 21:39:58 +0000 (21:39 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Mon, 10 May 2021 16:03:55 +0000 (18:03 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/ops_executer.h
src/crimson/osd/osd_operations/osdop_params.h
src/crimson/osd/pg.cc
src/crimson/osd/pg.h
src/crimson/osd/pg_backend.cc
src/crimson/osd/replicated_backend.cc

index 6bac348a0578b1827ebbb0944471b6913f5a9636..498ec07f6ace82e24cd5a6f1d345f48cbbe89ffe 100644 (file)
@@ -329,6 +329,8 @@ OpsExecuter::flush_changes_n_do_ops_effects(Ref<PG> pg, MutFunc&& mut_func) &&
   assert(obc);
   auto maybe_mutated = interruptor::make_interruptible(osd_op_errorator::now());
   if (want_mutate) {
+    osd_op_params->req_id = msg->get_reqid();
+    //osd_op_params->mtime = msg->get_mtime();
     maybe_mutated = std::forward<MutFunc>(mut_func)(std::move(txn),
                                                     std::move(obc),
                                                     std::move(*osd_op_params),
index 11f0be2c11f369e11939c713d82563fca456e20d..c7b81e765d9d764bb7ee741acab1634b6adbc5f2 100644 (file)
@@ -8,7 +8,8 @@
 // level of processing. I inclosed all those parameters in this struct to
 // avoid passing each of them as a method parameter.
 struct osd_op_params_t {
-  Ref<MOSDOp> req;
+  osd_reqid_t req_id;
+  utime_t mtime;
   eversion_t at_version;
   eversion_t pg_trim_to;
   eversion_t min_last_complete_ondisk;
index be9130cd48865ae91bcba489bb503fa5b5f2f4a3..feb477439056c7eff532c1464ebaf3342805e9fc 100644 (file)
@@ -589,7 +589,7 @@ PG::interruptible_future<> PG::submit_transaction(
                      pg_log_entry_t::MODIFY : pg_log_entry_t::DELETE,
                    obc->obs.oi.soid, osd_op_p.at_version, obc->obs.oi.version,
                    osd_op_p.user_modify ? osd_op_p.at_version.version : 0,
-                   osd_op_p.req->get_reqid(), osd_op_p.req->get_mtime(),
+                   osd_op_p.req_id, osd_op_p.mtime,
                     op_info.allows_returnvec() && !ops.empty() ? ops.back().rval.code : 0);
   // TODO: refactor the submit_transaction
   if (op_info.allows_returnvec()) {
@@ -623,10 +623,8 @@ PG::interruptible_future<> PG::submit_transaction(
 
 void PG::fill_op_params_bump_pg_version(
   osd_op_params_t& osd_op_p,
-  Ref<MOSDOp> m,
   const bool user_modify)
 {
-  osd_op_p.req = std::move(m);
   osd_op_p.at_version = next_version();
   osd_op_p.pg_trim_to = get_pg_trim_to();
   osd_op_p.min_last_complete_ondisk = get_min_last_complete_ondisk();
@@ -702,7 +700,6 @@ template <class Ret, class SuccessFunc, class FailureFunc>
 PG::do_osd_ops_iertr::future<Ret> PG::do_osd_ops_execute(
   OpsExecuter&& ox,
   std::vector<OSDOp> ops,
-  Ref<MOSDOp> m,
   const OpInfo &op_info,
   SuccessFunc&& success_func,
   FailureFunc&& failure_func)
@@ -711,29 +708,26 @@ PG::do_osd_ops_iertr::future<Ret> PG::do_osd_ops_execute(
     return reload_obc(obc).handle_error_interruptible(
       load_obc_ertr::assert_all{"can't live with object state messed up"});
   });
-  return interruptor::do_for_each(ops, [m, &ox](OSDOp& osd_op) {
+  return interruptor::do_for_each(ops, [&ox](OSDOp& osd_op) {
     logger().debug(
-      "do_osd_ops_execute: {} - object {} - handling op {}",
-      *m,
+      "do_osd_ops_execute: object {} - handling op {}",
       ox.get_target(),
       ceph_osd_op_name(osd_op.op.op));
     return ox.execute_op(osd_op);
-  }).safe_then_interruptible([this, m, &ox, &op_info] {
+  }).safe_then_interruptible([this, &ox, &op_info, &ops] {
     logger().debug(
-      "do_osd_ops_execute: {} - object {} all operations successful",
-      *m,
+      "do_osd_ops_execute: object {} all operations successful",
       ox.get_target());
     return std::move(ox).flush_changes_n_do_ops_effects(
       Ref<PG>{this},
-      [this, m, &op_info, &ops] (auto&& txn,
-                                 auto&& obc,
-                                 auto&& osd_op_p,
-                                 bool user_modify) {
+      [this, &op_info, &ops] (auto&& txn,
+                              auto&& obc,
+                              auto&& osd_op_p,
+                              bool user_modify) {
        logger().debug(
-         "do_osd_ops_execute: {} - object {} submitting txn",
-         *m,
+         "do_osd_ops_execute: object {} submitting txn",
          obc->get_oid());
-        fill_op_params_bump_pg_version(osd_op_p, std::move(m), user_modify);
+        fill_op_params_bump_pg_version(osd_op_p, user_modify);
        return submit_transaction(
           op_info,
           ops,
@@ -756,7 +750,7 @@ PG::do_osd_ops_iertr::future<Ret> PG::do_osd_ops_execute(
       });
     });
   }), OpsExecuter::osd_op_errorator::all_same_way(
-    [rollbacker, failure_func=std::move(failure_func), m]
+    [rollbacker, failure_func=std::move(failure_func)]
     (const std::error_code& e) mutable {
     return rollbacker.rollback_obc_if_modified(e).then_interruptible(
       [&e, failure_func=std::move(failure_func)] {
@@ -777,7 +771,7 @@ PG::do_osd_ops(
   auto ox = std::make_unique<OpsExecuter>(
     std::move(obc), op_info, get_pool().info, get_backend(), *m);
   return do_osd_ops_execute<Ref<MOSDOpReply>>(
-    std::move(*ox), m->ops, m, op_info,
+    std::move(*ox), m->ops, op_info,
     [this, m, rvec = op_info.allows_returnvec()] {
       // TODO: should stop at the first op which returns a negative retval,
       //       cmpext uses it for returning the index of first unmatched byte
index 1368c5035e12e24c6f38c75628df29630b99cd7a..2d109e77fa4bbd9a1b360d82f2bcae06997a18ed 100644 (file)
@@ -561,7 +561,6 @@ private:
     PeeringCtx &rctx);
   void fill_op_params_bump_pg_version(
     osd_op_params_t& osd_op_p,
-    Ref<MOSDOp> m,
     const bool user_modify);
   interruptible_future<Ref<MOSDOpReply>> handle_failed_op(
     const std::error_code& e,
@@ -582,7 +581,6 @@ private:
   do_osd_ops_iertr::future<Ret> do_osd_ops_execute(
     OpsExecuter&& ox,
     std::vector<OSDOp> ops,
-    Ref<MOSDOp> m,
     const OpInfo &op_info,
     SuccessFunc&& success_func,
     FailureFunc&& failure_func);
index a76b88b25ff25ce28e8613ce0fe5468dd68037a1..ab87a6e7e3eef1839fcaf350fea3f7ccb550aac1 100644 (file)
@@ -136,13 +136,12 @@ PGBackend::mutate_object(
     obc->obs.oi.prior_version = ctx->obs->oi.version;
 #endif
 
-    auto& m = osd_op_p.req;
     obc->obs.oi.prior_version = obc->obs.oi.version;
     obc->obs.oi.version = osd_op_p.at_version;
     if (osd_op_p.user_at_version > obc->obs.oi.user_version)
       obc->obs.oi.user_version = osd_op_p.user_at_version;
-    obc->obs.oi.last_reqid = m->get_reqid();
-    obc->obs.oi.mtime = m->get_mtime();
+    obc->obs.oi.last_reqid = osd_op_p.req_id;
+    obc->obs.oi.mtime = osd_op_p.mtime;
     obc->obs.oi.local_mtime = ceph_clock_now();
 
     // object_info_t
index 582ab3893dfd14aee5a1836f68c9791189474483..db4ac59c645e37f7e8e6ae20a05337d9548d0e67 100644 (file)
@@ -55,7 +55,6 @@ ReplicatedBackend::_submit_transaction(std::set<pg_shard_t>&& pg_shards,
   }
 
   const ceph_tid_t tid = next_txn_id++;
-  auto req_id = osd_op_p.req->get_reqid();
   auto pending_txn =
     pending_trans.try_emplace(tid, pg_shards.size(), osd_op_p.at_version).first;
   bufferlist encoded_txn;
@@ -67,11 +66,16 @@ ReplicatedBackend::_submit_transaction(std::set<pg_shard_t>&& pg_shards,
       if (pg_shard == whoami) {
         return shard_services.get_store().do_transaction(coll,std::move(txn));
       } else {
-        auto m = crimson::net::make_message<MOSDRepOp>(req_id, whoami,
-                                         spg_t{pgid, pg_shard.shard}, hoid,
-                                         CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK,
-                                         map_epoch, min_epoch,
-                                         tid, osd_op_p.at_version);
+        auto m = crimson::net::make_message<MOSDRepOp>(
+          osd_op_p.req_id,
+          whoami,
+          spg_t{pgid, pg_shard.shard},
+          hoid,
+          CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK,
+          map_epoch,
+          min_epoch,
+          tid,
+          osd_op_p.at_version);
         m->set_data(encoded_txn);
         pending_txn->second.acked_peers.push_back({pg_shard, eversion_t{}});
        encode(log_entries, m->logbl);