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();
}
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,
#ifndef __LIBRADOS_FWD_HPP
#define __LIBRADOS_FWD_HPP
+struct blkin_trace_info;
+
namespace libradosstriper {
class RadosStriper;
#include "common/ceph_argparse.h"
#include "common/common_init.h"
#include "common/hobject.h"
+#include "common/EventTrace.h"
#include "global/global_init.h"
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);
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,
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;
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;