]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: implement cls_get_request_origin().
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 28 Aug 2019 14:39:59 +0000 (16:39 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 13 Sep 2019 20:12:31 +0000 (22:12 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/objclass.cc
src/crimson/osd/ops_executer.h
src/crimson/osd/pg.cc

index 22690b5f7f342775ec31107a54c8fcacba824ae3..1716160e3294b7f46d6c02934d619c44e5dd779b 100644 (file)
@@ -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<ceph::osd::OpsExecuter*>(hctx)->get_orig_source_inst();
   return 0;
 }
 
index d4b0b66a6d4714840196a35f8a41ecd36d1e3a00..87acd240122c055f8ed3122d84409f09fea92e5b 100644 (file)
@@ -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<MOSDOp> 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<MOSDOp> 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 <typename Func>
   seastar::future<> submit_changes(Func&& f) &&;
+
+  auto get_orig_source_inst() const {
+    return msg->get_orig_source_inst();
+  }
 };
 
 template <class Context, class MainFunc, class EffectFunc>
index d6890834f5de52ec8b3fd6b65db2f317227cf603..245a81cb217f71e5f01a9ebd40537de796090b36 100644 (file)
@@ -358,8 +358,8 @@ seastar::future<Ref<MOSDOpReply>> PG::do_osd_ops(Ref<MOSDOp> 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);