From: Radoslaw Zarzynski Date: Tue, 23 Mar 2021 21:39:58 +0000 (+0000) Subject: crimson/osd: PG::do_osd_ops_execute() doesn't depend on MOSDOp anymore. X-Git-Tag: v17.1.0~1984^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=eaa82d5823ef06b6d8f4f4a27d653b6b5bc039b2;p=ceph.git crimson/osd: PG::do_osd_ops_execute() doesn't depend on MOSDOp anymore. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/ops_executer.h b/src/crimson/osd/ops_executer.h index 6bac348a0578..498ec07f6ace 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -329,6 +329,8 @@ OpsExecuter::flush_changes_n_do_ops_effects(Ref 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(mut_func)(std::move(txn), std::move(obc), std::move(*osd_op_params), diff --git a/src/crimson/osd/osd_operations/osdop_params.h b/src/crimson/osd/osd_operations/osdop_params.h index 11f0be2c11f3..c7b81e765d9d 100644 --- a/src/crimson/osd/osd_operations/osdop_params.h +++ b/src/crimson/osd/osd_operations/osdop_params.h @@ -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 req; + osd_reqid_t req_id; + utime_t mtime; eversion_t at_version; eversion_t pg_trim_to; eversion_t min_last_complete_ondisk; diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index be9130cd4886..feb477439056 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -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 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 PG::do_osd_ops_iertr::future PG::do_osd_ops_execute( OpsExecuter&& ox, std::vector ops, - Ref m, const OpInfo &op_info, SuccessFunc&& success_func, FailureFunc&& failure_func) @@ -711,29 +708,26 @@ PG::do_osd_ops_iertr::future 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{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 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( std::move(obc), op_info, get_pool().info, get_backend(), *m); return do_osd_ops_execute>( - 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 diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 1368c5035e12..2d109e77fa4b 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -561,7 +561,6 @@ private: PeeringCtx &rctx); void fill_op_params_bump_pg_version( osd_op_params_t& osd_op_p, - Ref m, const bool user_modify); interruptible_future> handle_failed_op( const std::error_code& e, @@ -582,7 +581,6 @@ private: do_osd_ops_iertr::future do_osd_ops_execute( OpsExecuter&& ox, std::vector ops, - Ref m, const OpInfo &op_info, SuccessFunc&& success_func, FailureFunc&& failure_func); diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index a76b88b25ff2..ab87a6e7e3ee 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -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 diff --git a/src/crimson/osd/replicated_backend.cc b/src/crimson/osd/replicated_backend.cc index 582ab3893dfd..db4ac59c645e 100644 --- a/src/crimson/osd/replicated_backend.cc +++ b/src/crimson/osd/replicated_backend.cc @@ -55,7 +55,6 @@ ReplicatedBackend::_submit_transaction(std::set&& 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_shards, if (pg_shard == whoami) { return shard_services.get_store().do_transaction(coll,std::move(txn)); } else { - auto m = crimson::net::make_message(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( + 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);