From: Victor Araujo Date: Thu, 18 Aug 2016 11:25:33 +0000 (+0200) Subject: librados: Overload aio_operate with blkin trace info parameter X-Git-Tag: v12.0.3~73^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e0a1532bfb16393c6ac2457f3a5f2d397b8aeae6;p=ceph.git librados: Overload aio_operate with blkin trace info parameter This will enable passing trace information from rbd to librados for aio_reads and aio_writes. Signed-off-by: Victor Araujo --- diff --git a/src/include/rados/librados.h b/src/include/rados/librados.h index 401d7d4453f..e111380a0fb 100644 --- a/src/include/rados/librados.h +++ b/src/include/rados/librados.h @@ -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. * diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp index 5c1780c5595..10e8f203067 100644 --- a/src/include/rados/librados.hpp +++ b/src/include/rados/librados.hpp @@ -1093,6 +1093,10 @@ namespace librados int aio_operate(const std::string& oid, AioCompletion *c, ObjectWriteOperation *op, snap_t seq, std::vector& snaps); + int aio_operate(const std::string& oid, AioCompletion *c, + ObjectWriteOperation *op, snap_t seq, + std::vector& 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, diff --git a/src/librados/IoCtxImpl.cc b/src/librados/IoCtxImpl.cc index 61c89f32915..4102df1c0dd 100644 --- a/src/librados/IoCtxImpl.cc +++ b/src/librados/IoCtxImpl.cc @@ -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; } diff --git a/src/librados/IoCtxImpl.h b/src/librados/IoCtxImpl.h index 2d2a2201d04..7870b831710 100644 --- a/src/librados/IoCtxImpl.h +++ b/src/librados/IoCtxImpl.h @@ -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; diff --git a/src/librados/librados.cc b/src/librados/librados.cc index 126e82217c9..e7e75605d44 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -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& snaps, + const blkin_trace_info *trace_info) +{ + object_t obj(oid); + vector 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) { diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index 216443ee609..85b947afef9 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -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;