]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
neorados: support blkin trace passing on execute calls
authorJason Dillaman <dillaman@redhat.com>
Wed, 8 Jul 2020 18:28:55 +0000 (14:28 -0400)
committerJason Dillaman <dillaman@redhat.com>
Thu, 16 Jul 2020 19:59:31 +0000 (15:59 -0400)
librbd passes blkin traces from the user API down through to
Objecter and back. Add these missing hooks to the neorados API
since they weren't included in the intial revision.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/include/neorados/RADOS.hpp
src/include/rados/librados_fwd.hpp
src/neorados/RADOS.cc
src/osdc/Objecter.h

index 5b0b011d3614cdebaa487d7be9fb164ec0599ad2..98bed7625add80cc9c3ea59f7d6037a9f4e1063f 100644 (file)
@@ -551,23 +551,25 @@ public:
   template<typename CompletionToken>
   auto execute(const Object& o, const IOContext& ioc, ReadOp&& op,
               ceph::buffer::list* bl,
-              CompletionToken&& token, uint64_t* objver = nullptr) {
+              CompletionToken&& token, uint64_t* objver = nullptr,
+              const blkin_trace_info* trace_info = nullptr) {
     boost::asio::async_completion<CompletionToken, Op::Signature> init(token);
     execute(o, ioc, std::move(op), bl,
            ReadOp::Completion::create(get_executor(),
                                       std::move(init.completion_handler)),
-           objver);
+           objver, trace_info);
     return init.result.get();
   }
 
   template<typename CompletionToken>
   auto execute(const Object& o, const IOContext& ioc, WriteOp&& op,
-              CompletionToken&& token, uint64_t* objver = nullptr) {
+              CompletionToken&& token, uint64_t* objver = nullptr,
+              const blkin_trace_info* trace_info = nullptr) {
     boost::asio::async_completion<CompletionToken, Op::Signature> init(token);
     execute(o, ioc, std::move(op),
            Op::Completion::create(get_executor(),
                                   std::move(init.completion_handler)),
-           objver);
+           objver, trace_info);
     return init.result.get();
   }
 
@@ -954,10 +956,11 @@ private:
 
   void execute(const Object& o, const IOContext& ioc, ReadOp&& op,
               ceph::buffer::list* bl, std::unique_ptr<Op::Completion> c,
-              uint64_t* objver);
+              uint64_t* objver, const blkin_trace_info* trace_info);
 
   void execute(const Object& o, const IOContext& ioc, WriteOp&& op,
-              std::unique_ptr<Op::Completion> c, uint64_t* objver);
+              std::unique_ptr<Op::Completion> c, uint64_t* objver,
+              const blkin_trace_info* trace_info);
 
   void execute(const Object& o, std::int64_t pool, ReadOp&& op,
               ceph::buffer::list* bl, std::unique_ptr<Op::Completion> c,
index 8926d097095c9efa9479e829d3dc09fbaaeced97..396f3a8387575948ec912751d1f227484f66a049 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef __LIBRADOS_FWD_HPP
 #define __LIBRADOS_FWD_HPP
 
+struct blkin_trace_info;
+
 namespace libradosstriper {
 
 class RadosStriper;
index 8a49f05a9c44c57e15ee3785d785efbae124a157..b5f93c5a8e21450c4e8b34fb79e01d0333573b23 100644 (file)
@@ -27,6 +27,7 @@
 #include "common/ceph_argparse.h"
 #include "common/common_init.h"
 #include "common/hobject.h"
+#include "common/EventTrace.h"
 
 #include "global/global_init.h"
 
@@ -783,19 +784,30 @@ boost::asio::io_context& RADOS::get_io_context() {
 
 void RADOS::execute(const Object& o, const IOContext& _ioc, ReadOp&& _op,
                    cb::list* bl,
-                   std::unique_ptr<ReadOp::Completion> c, version_t* objver) {
+                   std::unique_ptr<ReadOp::Completion> c, version_t* objver,
+                   const blkin_trace_info *trace_info) {
   auto oid = reinterpret_cast<const object_t*>(&o.impl);
   auto ioc = reinterpret_cast<const IOContextImpl*>(&_ioc.impl);
   auto op = reinterpret_cast<OpImpl*>(&_op.impl);
   auto flags = 0; // Should be in Op.
 
+  ZTracer::Trace trace;
+  if (trace_info) {
+    ZTracer::Trace parent_trace("", nullptr, trace_info);
+    trace.init("rados execute", &impl->objecter->trace_endpoint, &parent_trace);
+  }
+
+  trace.event("init");
   impl->objecter->read(
     *oid, ioc->oloc, std::move(op->op), ioc->snap_seq, bl, flags,
-    std::move(c), objver);
+    std::move(c), objver, nullptr /* data_offset */, 0 /* features */, &trace);
+
+  trace.event("submitted");
 }
 
 void RADOS::execute(const Object& o, const IOContext& _ioc, WriteOp&& _op,
-                   std::unique_ptr<WriteOp::Completion> c, version_t* objver) {
+                   std::unique_ptr<WriteOp::Completion> c, version_t* objver,
+                   const blkin_trace_info *trace_info) {
   auto oid = reinterpret_cast<const object_t*>(&o.impl);
   auto ioc = reinterpret_cast<const IOContextImpl*>(&_ioc.impl);
   auto op = reinterpret_cast<OpImpl*>(&_op.impl);
@@ -806,10 +818,18 @@ void RADOS::execute(const Object& o, const IOContext& _ioc, WriteOp&& _op,
   else
     mtime = ceph::real_clock::now();
 
+  ZTracer::Trace trace;
+  if (trace_info) {
+    ZTracer::Trace parent_trace("", nullptr, trace_info);
+    trace.init("rados execute", &impl->objecter->trace_endpoint, &parent_trace);
+  }
+
+  trace.event("init");
   impl->objecter->mutate(
     *oid, ioc->oloc, std::move(op->op), ioc->snapc,
     mtime, flags,
-    std::move(c), objver);
+    std::move(c), objver, osd_reqid_t{}, &trace);
+  trace.event("submitted");
 }
 
 void RADOS::execute(const Object& o, std::int64_t pool, ReadOp&& _op,
index 18f17d53ac6e802f957a71fe022630f2e303cfd9..7341a719e7953891b0fa37b5ed6f3fe643429a78 100644 (file)
@@ -2931,10 +2931,11 @@ public:
              ObjectOperation&& op, const SnapContext& snapc,
              ceph::real_time mtime, int flags,
              std::unique_ptr<Op::OpComp>&& oncommit,
-             version_t *objver = NULL, osd_reqid_t reqid = osd_reqid_t()) {
+             version_t *objver = NULL, osd_reqid_t reqid = osd_reqid_t(),
+             ZTracer::Trace *parent_trace = nullptr) {
     Op *o = new Op(oid, oloc, std::move(op.ops), flags | global_op_flags |
                   CEPH_OSD_FLAG_WRITE, std::move(oncommit), objver,
-                  nullptr);
+                  nullptr, parent_trace);
     o->priority = op.priority;
     o->mtime = mtime;
     o->snapc = snapc;
@@ -2990,10 +2991,10 @@ public:
            ObjectOperation&& op, snapid_t snapid, ceph::buffer::list *pbl,
            int flags, std::unique_ptr<Op::OpComp>&& onack,
            version_t *objver = nullptr, int *data_offset = nullptr,
-           uint64_t features = 0) {
+           uint64_t features = 0, ZTracer::Trace *parent_trace = nullptr) {
     Op *o = new Op(oid, oloc, std::move(op.ops), flags | global_op_flags |
                   CEPH_OSD_FLAG_READ, std::move(onack), objver,
-                  data_offset);
+                  data_offset, parent_trace);
     o->priority = op.priority;
     o->snapid = snapid;
     o->outbl = pbl;