From 0bae941adc83f536719fd8a3e9d81ccbf3f592c4 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Fri, 7 Aug 2020 17:55:32 +0200 Subject: [PATCH] crimson/osd: dissect PgOpsExecuter from OpsExecuter. Signed-off-by: Radoslaw Zarzynski --- src/crimson/osd/ops_executer.cc | 2 +- src/crimson/osd/ops_executer.h | 34 ++++++++++++++++++++++----------- src/crimson/osd/pg.cc | 2 +- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/crimson/osd/ops_executer.cc b/src/crimson/osd/ops_executer.cc index 5d0eaa21a1a..7f7ce0e0c3b 100644 --- a/src/crimson/osd/ops_executer.cc +++ b/src/crimson/osd/ops_executer.cc @@ -947,7 +947,7 @@ static seastar::future<> do_pgls_filtered( } seastar::future<> -OpsExecuter::execute_pg_op(OSDOp& osd_op) +PgOpsExecuter::execute_pg_op(OSDOp& osd_op) { logger().warn("handling op {}", ceph_osd_op_name(osd_op.op.op)); switch (const ceph_osd_op& op = osd_op.op; op.op) { diff --git a/src/crimson/osd/ops_executer.h b/src/crimson/osd/ops_executer.h index 2f64b225c3f..1dbf5e04639 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -35,6 +35,8 @@ class PGLSFilter; class OSDOp; namespace crimson::osd { + +// PgOpsExecuter -- a class for executing ops targeting a certain object. class OpsExecuter { using call_errorator = crimson::errorator< crimson::stateful_ec, @@ -159,13 +161,6 @@ private: return std::forward(f)(backend, obc->obs, txn); } - // PG operations are being provided with pg instead of os. - template - auto do_pg_op(Func&& f) { - return std::forward(f)(std::as_const(pg), - std::as_const(msg->get_hobj().nspace)); - } - decltype(auto) dont_do_legacy_op() { return crimson::ct_error::operation_not_supported::make(); } @@ -178,12 +173,8 @@ public: backend(pg.get_backend()), msg(std::move(msg)) { } - OpsExecuter(PG& pg, Ref msg) - : OpsExecuter{ObjectContextRef(), nullptr, pg, std::move(msg)} - {} osd_op_errorator::future<> execute_osd_op(class OSDOp& osd_op); - seastar::future<> execute_pg_op(class OSDOp& osd_op); template osd_op_errorator::future<> flush_changes(Func&& func, MutFunc&& mut_func) &&; @@ -275,4 +266,25 @@ OpsExecuter::osd_op_errorator::future<> OpsExecuter::flush_changes( } } +// PgOpsExecuter -- a class for executing ops targeting a certain PG. +class PgOpsExecuter { +public: + PgOpsExecuter(PG& pg, Ref msg) + : pg(pg), msg(std::move(msg)) { + } + + seastar::future<> execute_pg_op(class OSDOp& osd_op); + +private: + // PG operations are being provided with pg instead of os. + template + auto do_pg_op(Func&& f) { + return std::forward(f)(std::as_const(pg), + std::as_const(msg->get_hobj().nspace)); + } + + PG& pg; + Ref msg; +}; + } // namespace crimson::osd diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 5b2b64fb3fd..783dcbf4672 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -676,7 +676,7 @@ seastar::future> PG::do_pg_ops(Ref m) throw crimson::common::system_shutdown_exception(); } - auto ox = std::make_unique(*this/* as const& */, m); + auto ox = std::make_unique(*this/* as const& */, m); return seastar::do_for_each(m->ops, [ox = ox.get()](OSDOp& osd_op) { logger().debug("will be handling pg op {}", ceph_osd_op_name(osd_op.op.op)); return ox->execute_pg_op(osd_op); -- 2.39.5