From: Radoslaw Zarzynski Date: Wed, 28 Aug 2019 14:39:59 +0000 (+0200) Subject: crimson/osd: implement cls_get_request_origin(). X-Git-Tag: v15.1.0~1553^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fe9ce1f66ca10cbc83f1910df17b2e41fb92c403;p=ceph.git crimson/osd: implement cls_get_request_origin(). Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/objclass.cc b/src/crimson/osd/objclass.cc index 22690b5f7f34..1716160e3294 100644 --- a/src/crimson/osd/objclass.cc +++ b/src/crimson/osd/objclass.cc @@ -53,6 +53,9 @@ int cls_read(cls_method_context_t hctx, int cls_get_request_origin(cls_method_context_t hctx, entity_inst_t *origin) { + assert(origin) + *origin = + reinterpret_cast(hctx)->get_orig_source_inst(); return 0; } diff --git a/src/crimson/osd/ops_executer.h b/src/crimson/osd/ops_executer.h index d4b0b66a6d47..87acd240122c 100644 --- a/src/crimson/osd/ops_executer.h +++ b/src/crimson/osd/ops_executer.h @@ -29,6 +29,8 @@ #include "crimson/osd/pg_backend.h" #include "crimson/osd/exceptions.h" +#include "messages/MOSDOp.h" + class PGLSFilter; class OSDOp; @@ -48,6 +50,7 @@ class OpsExecuter { PGBackend::cached_os_t os; PG& pg; PGBackend& backend; + Ref msg; ceph::os::Transaction txn; size_t num_read = 0; ///< count read ops @@ -94,14 +97,21 @@ class OpsExecuter { } public: - OpsExecuter(PGBackend::cached_os_t os, PG& pg) - : os(std::move(os)), pg(pg), backend(pg.get_backend()) { + OpsExecuter(PGBackend::cached_os_t os, PG& pg, Ref msg) + : os(std::move(os)), + pg(pg), + backend(pg.get_backend()), + msg(std::move(msg)) { } seastar::future<> do_osd_op(class OSDOp& osd_op); template seastar::future<> submit_changes(Func&& f) &&; + + auto get_orig_source_inst() const { + return msg->get_orig_source_inst(); + } }; template diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index d6890834f5de..245a81cb217f 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -358,8 +358,8 @@ seastar::future> PG::do_osd_ops(Ref m) const auto oid = m->get_snapid() == CEPH_SNAPDIR ? m->get_hobj().get_head() : m->get_hobj(); return backend->get_object_state(oid).then([this, m](auto os) mutable { - return seastar::do_with(OpsExecuter{std::move(os), *this/* as const& */}, - [this, m=std::move(m)] (auto& ox) { + return seastar::do_with(OpsExecuter{std::move(os), *this/* as const& */, m}, + [this, m] (auto& ox) { return seastar::do_for_each(m->ops, [this, &ox](OSDOp& osd_op) { logger().debug("will be handling op {}", ceph_osd_op_name(osd_op.op.op)); return ox.do_osd_op(osd_op);