]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: Overload aio_operate with blkin trace info parameter
authorVictor Araujo <ve.ar91@gmail.com>
Thu, 18 Aug 2016 11:25:33 +0000 (13:25 +0200)
committerSage Weil <sage@redhat.com>
Fri, 5 May 2017 18:05:24 +0000 (14:05 -0400)
This will enable passing trace information from rbd to librados for
aio_reads and aio_writes.

Signed-off-by: Victor Araujo <ve.ar91@gmail.com>
src/include/rados/librados.h
src/include/rados/librados.hpp
src/librados/IoCtxImpl.cc
src/librados/IoCtxImpl.h
src/librados/librados.cc
src/osdc/Objecter.h

index 401d7d4453f0ebce1f1f1dbec6503aef3659751a..e111380a0fbe57d0a898881afc1ea031198816cf 100644 (file)
@@ -353,6 +353,12 @@ typedef void *rados_read_op_t;
  */
 typedef void *rados_completion_t;
 
+/**
+ * @struct blkin_trace_info
+ * blkin trace information for Zipkin tracing
+ */
+struct blkin_trace_info;
+
 /**
  * Get the version of librados.
  *
index 5c1780c5595f170ae450a8ff79198e6ece71ec57..10e8f203067a42fa00263eb84b961d359571f935 100644 (file)
@@ -1093,6 +1093,10 @@ namespace librados
     int aio_operate(const std::string& oid, AioCompletion *c,
                    ObjectWriteOperation *op, snap_t seq,
                    std::vector<snap_t>& snaps);
+    int aio_operate(const std::string& oid, AioCompletion *c,
+        ObjectWriteOperation *op, snap_t seq,
+        std::vector<snap_t>& snaps,
+        const blkin_trace_info *trace_info);
     int aio_operate(const std::string& oid, AioCompletion *c,
                    ObjectReadOperation *op, bufferlist *pbl);
 
@@ -1104,6 +1108,9 @@ namespace librados
     int aio_operate(const std::string& oid, AioCompletion *c,
                    ObjectReadOperation *op, int flags,
                    bufferlist *pbl);
+    int aio_operate(const std::string& oid, AioCompletion *c,
+        ObjectReadOperation *op, int flags,
+        bufferlist *pbl, const blkin_trace_info *trace_info);
 
     // watch/notify
     int watch2(const std::string& o, uint64_t *handle,
index 61c89f3291511d839cd672f8eaa27ac7cd0deaff..4102df1c0ddd6dbc0f811c610c0c3b3fa1709c26 100644 (file)
@@ -769,7 +769,8 @@ int librados::IoCtxImpl::aio_operate_read(const object_t &oid,
                                          ::ObjectOperation *o,
                                          AioCompletionImpl *c,
                                          int flags,
-                                         bufferlist *pbl)
+                                         bufferlist *pbl,
+            const blkin_trace_info *trace_info)
 {
   FUNCTRACE();
   Context *oncomplete = new C_aio_Complete(c);
@@ -780,16 +781,24 @@ int librados::IoCtxImpl::aio_operate_read(const object_t &oid,
   c->is_read = true;
   c->io = this;
 
+  ZTracer::Trace trace;
+  if (trace_info)
+    trace.init("rados operate read", &objecter->trace_endpoint, trace_info);
+
+  trace.event("init root span");
   Objecter::Op *objecter_op = objecter->prepare_read_op(oid, oloc,
                 *o, snap_seq, pbl, flags,
-                oncomplete, &c->objver);
+                oncomplete, &c->objver, nullptr, 0, &trace);
   objecter->op_submit(objecter_op, &c->tid);
+  trace.event("rados operate read submitted");
+
   return 0;
 }
 
 int librados::IoCtxImpl::aio_operate(const object_t& oid,
                                     ::ObjectOperation *o, AioCompletionImpl *c,
-                                    const SnapContext& snap_context, int flags)
+                                    const SnapContext& snap_context, int flags,
+             const blkin_trace_info *trace_info)
 {
   FUNCTRACE();
   OID_EVENT_TRACE(oid.name.c_str(), "RADOS_WRITE_OP_BEGIN");
@@ -806,10 +815,16 @@ int librados::IoCtxImpl::aio_operate(const object_t& oid,
   c->io = this;
   queue_aio_write(c);
 
+  ZTracer::Trace trace;
+  if (trace_info)
+    trace.init("rados operate", &objecter->trace_endpoint, trace_info);
+
+  trace.event("init root span");
   Objecter::Op *op = objecter->prepare_mutate_op(
     oid, oloc, *o, snap_context, ut, flags,
-    oncomplete, &c->objver);
+    oncomplete, &c->objver, osd_reqid_t(), &trace);
   objecter->op_submit(op, &c->tid);
+  trace.event("rados operate op submitted");
 
   return 0;
 }
index 2d2a2201d04eabd6fa43189d72faff43731fb0b6..7870b83171092fc2279b3aad128582e984f61c70 100644 (file)
@@ -157,9 +157,9 @@ struct librados::IoCtxImpl {
   int operate_read(const object_t& oid, ::ObjectOperation *o, bufferlist *pbl, int flags=0);
   int aio_operate(const object_t& oid, ::ObjectOperation *o,
                  AioCompletionImpl *c, const SnapContext& snap_context,
-                 int flags);
+                 int flags, const blkin_trace_info *trace_info = nullptr);
   int aio_operate_read(const object_t& oid, ::ObjectOperation *o,
-                      AioCompletionImpl *c, int flags, bufferlist *pbl);
+                      AioCompletionImpl *c, int flags, bufferlist *pbl, const blkin_trace_info *trace_info = nullptr);
 
   struct C_aio_stat_Ack : public Context {
     librados::AioCompletionImpl *c;
index 126e82217c944fd0b11de702f9fec41e94649871..e7e75605d448864abcdecf7e22612e7a7f6a83ac 100644 (file)
@@ -1518,6 +1518,21 @@ int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c,
                                  snapc, 0);
 }
 
+int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c,
+         librados::ObjectWriteOperation *o,
+         snap_t snap_seq, std::vector<snap_t>& snaps,
+         const blkin_trace_info *trace_info)
+{
+  object_t obj(oid);
+  vector<snapid_t> snv;
+  snv.resize(snaps.size());
+  for (size_t i = 0; i < snaps.size(); ++i)
+    snv[i] = snaps[i];
+  SnapContext snapc(snap_seq, snv);
+  return io_ctx_impl->aio_operate(obj, &o->impl->o, c->pc,
+          snapc, 0, trace_info);
+}
+
 int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c,
                                 librados::ObjectReadOperation *o,
                                 bufferlist *pbl)
@@ -1555,6 +1570,14 @@ int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c,
                                       translate_flags(flags), pbl);
 }
 
+int librados::IoCtx::aio_operate(const std::string& oid, AioCompletion *c,
+         librados::ObjectReadOperation *o,
+         int flags, bufferlist *pbl, const blkin_trace_info *trace_info)
+{
+  object_t obj(oid);
+  return io_ctx_impl->aio_operate_read(obj, &o->impl->o, c->pc,
+               translate_flags(flags), pbl, trace_info);
+}
 
 void librados::IoCtx::snap_set_read(snap_t seq)
 {
index 216443ee609049f8b1289c847bbdda0f3615cc93..85b947afef9de7e24d72cabf51868d607e12de32 100644 (file)
@@ -2184,9 +2184,10 @@ public:
     ObjectOperation& op, const SnapContext& snapc,
     ceph::real_time mtime, int flags,
     Context *oncommit, version_t *objver = NULL,
-    osd_reqid_t reqid = osd_reqid_t()) {
+    osd_reqid_t reqid = osd_reqid_t(),
+    ZTracer::Trace *parent_trace = nullptr) {
     Op *o = new Op(oid, oloc, op.ops, flags | global_op_flags.read() |
-                  CEPH_OSD_FLAG_WRITE, oncommit, objver);
+                  CEPH_OSD_FLAG_WRITE, oncommit, objver, nullptr, parent_trace);
     o->priority = op.priority;
     o->mtime = mtime;
     o->snapc = snapc;
@@ -2212,9 +2213,10 @@ public:
     snapid_t snapid, bufferlist *pbl, int flags,
     Context *onack, version_t *objver = NULL,
     int *data_offset = NULL,
-    uint64_t features = 0) {
+    uint64_t features = 0,
+    ZTracer::Trace *parent_trace = nullptr) {
     Op *o = new Op(oid, oloc, op.ops, flags | global_op_flags.read() |
-                  CEPH_OSD_FLAG_READ, onack, objver, data_offset);
+                  CEPH_OSD_FLAG_READ, onack, objver, data_offset, parent_trace);
     o->priority = op.priority;
     o->snapid = snapid;
     o->outbl = pbl;