From fe9ce1f66ca10cbc83f1910df17b2e41fb92c403 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Wed, 28 Aug 2019 16:39:59 +0200 Subject: [PATCH] crimson/osd: implement cls_get_request_origin(). Signed-off-by: Radoslaw Zarzynski --- src/crimson/osd/objclass.cc | 3 +++ src/crimson/osd/ops_executer.h | 14 ++++++++++++-- src/crimson/osd/pg.cc | 4 ++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/crimson/osd/objclass.cc b/src/crimson/osd/objclass.cc index 22690b5f7f3..1716160e329 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 d4b0b66a6d4..87acd240122 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 d6890834f5d..245a81cb217 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); -- 2.39.5