*/
typedef void *rados_completion_t;
+/**
+ * @struct blkin_trace_info
+ * blkin trace information for Zipkin tracing
+ */
+struct blkin_trace_info;
+
/**
* Get the version of 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);
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,
::ObjectOperation *o,
AioCompletionImpl *c,
int flags,
- bufferlist *pbl)
+ bufferlist *pbl,
+ const blkin_trace_info *trace_info)
{
FUNCTRACE();
Context *oncomplete = new C_aio_Complete(c);
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");
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;
}
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;
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)
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)
{
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;
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;