Skip to contentSkip to conversation

Rados support for blkin (LTTng + Zipkin) tracing

PATCH In review Andrew Shewmaker 1 participant 1 message Nov 12, 2014

lore
Share & tools
lore
#0 lore raw

PATCH 4/6 Rados support for blkin (LTTng + Zipkin) tracing

Added traced versions of Rados aio_read/write

These changes are Marios', with the following exceptions:
- split out Rados support from other tracing changes
- only Message.h includes blkin, as others include Message.h
- whitespace issues have been fixed

---
 src/include/rados/librados.h |  8 +++++
 src/librados/IoCtxImpl.cc    | 70 ++++++++++++++++++++++++++++++++++++++++++++
 src/librados/IoCtxImpl.h     |  7 +++++
 src/librados/RadosClient.cc  |  1 +
 src/librados/librados.cc     | 26 ++++++++++++++++
 5 files changed, 112 insertions(+)
src/include/rados/librados.h +8 -0
index 3e68292..8c7462c 100644
@@ -1591,6 +1591,10 @@ int rados_aio_write(rados_ioctx_t io, const char *oid,
 		    rados_completion_t completion,
 		    const char *buf, size_t len, uint64_t off);
 
+int rados_aio_write_traced(rados_ioctx_t io, const char *o,
+        rados_completion_t completion,
+        const char *buf, size_t len, uint64_t off,
+        struct blkin_trace_info *info);
 /**
  * Asychronously append data to an object
  *
@@ -1673,6 +1677,10 @@ int rados_aio_read(rados_ioctx_t io, const char *oid,
 		   rados_completion_t completion,
 		   char *buf, size_t len, uint64_t off);
 
+int rados_aio_read_traced(rados_ioctx_t io, const char *o,
+        rados_completion_t completion,
+        char *buf, size_t len, uint64_t off,
+        struct blkin_trace_info *info);
 /**
  * Block until all pending writes in an io context are safe
  *
src/librados/IoCtxImpl.cc +70 -0

100 lines not on this page · raw message

src/librados/IoCtxImpl.h +7 -0
index 528022f..c41ca3b 100644
@@ -49,6 +49,7 @@ struct librados::IoCtxImpl {
 
   Mutex *lock;
   Objecter *objecter;
+  ZTracer::ZTraceEndpointRef ioctx_endp;
 
   IoCtxImpl();
   IoCtxImpl(RadosClient *c, Objecter *objecter, Mutex *client_lock,
@@ -172,11 +173,17 @@ struct librados::IoCtxImpl {
 	       bufferlist *pbl, size_t len, uint64_t off, uint64_t snapid);
   int aio_read(object_t oid, AioCompletionImpl *c,
 	       char *buf, size_t len, uint64_t off, uint64_t snapid);
+  int aio_read_traced(object_t oid, AioCompletionImpl *c,
+	       char *buf, size_t len, uint64_t off, uint64_t snapid,
+	       struct blkin_trace_info *info);
   int aio_sparse_read(const object_t oid, AioCompletionImpl *c,
 		      std::map<uint64_t,uint64_t> *m, bufferlist *data_bl,
 		      size_t len, uint64_t off, uint64_t snapid);
   int aio_write(const object_t &oid, AioCompletionImpl *c,
 		const bufferlist& bl, size_t len, uint64_t off);
+  int aio_write_traced(const object_t &oid, AioCompletionImpl *c,
+		const bufferlist& bl, size_t len, uint64_t off,
+		struct blkin_trace_info *info);
   int aio_append(const object_t &oid, AioCompletionImpl *c,
 		 const bufferlist& bl, size_t len);
   int aio_write_full(const object_t &oid, AioCompletionImpl *c,
src/librados/RadosClient.cc +1 -0
index 249c34f..0f7d42b 100644
@@ -84,6 +84,7 @@ librados::RadosClient::RadosClient(CephContext *cct_)
     finisher(cct),
     max_watch_cookie(0)
 {
+  ZTracer::ztrace_init();
 }
 
 int64_t librados::RadosClient::lookup_pool(const char *name)
src/librados/librados.cc +26 -0
index 2358fb4..5a55c1d 100644
@@ -2900,6 +2900,18 @@ extern "C" int rados_aio_read(rados_ioctx_t io, const char *o,
 		       buf, len, off, ctx->snap_seq);
 }
 
+extern "C" int rados_aio_read_traced(rados_ioctx_t io, const char *o,
+				rados_completion_t completion,
+				char *buf, size_t len, uint64_t off,
+				struct blkin_trace_info *info)
+{
+	librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
+	object_t oid(o);
+	return ctx->aio_read_traced(oid,
+			(librados::AioCompletionImpl*)completion, buf, len,
+			off, ctx->snap_seq, info);
+}
+
 extern "C" int rados_aio_write(rados_ioctx_t io, const char *o,
 				rados_completion_t completion,
 				const char *buf, size_t len, uint64_t off)
@@ -2912,6 +2924,20 @@ extern "C" int rados_aio_write(rados_ioctx_t io, const char *o,
 			bl, len, off);
 }
 
+extern "C" int rados_aio_write_traced(rados_ioctx_t io, const char *o,
+		rados_completion_t completion,
+		const char *buf, size_t len, uint64_t off,
+		struct blkin_trace_info *info)
+{
+	librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
+	object_t oid(o);
+	bufferlist bl;
+	bl.append(buf, len);
+	return ctx->aio_write_traced(oid,
+			(librados::AioCompletionImpl*)completion,bl, len, off,
+			info);
+}
+
 extern "C" int rados_aio_append(rados_ioctx_t io, const char *o,
 				rados_completion_t completion,
 				const char *buf, size_t len)
Signature · 1 line
2.1.0