reply.tid = tid;
reply.last_complete = last_complete;
reply.committed = true;
+ reply.applied = true;
reply.from = get_parent()->whoami_shard();
handle_sub_write_reply(
get_parent()->whoami_shard(),
r->op.tid = tid;
r->op.last_complete = last_complete;
r->op.committed = true;
+ r->op.applied = true;
r->op.from = get_parent()->whoami_shard();
r->set_priority(CEPH_MSG_PRIO_HIGH);
r->trace = trace;
}
}
-struct SubWriteApplied : public Context {
- ECBackend *pg;
- OpRequestRef msg;
- ceph_tid_t tid;
- eversion_t version;
- const ZTracer::Trace trace;
- SubWriteApplied(
- ECBackend *pg,
- OpRequestRef msg,
- ceph_tid_t tid,
- eversion_t version,
- const ZTracer::Trace &trace)
- : pg(pg), msg(msg), tid(tid), version(version), trace(trace) {}
- void finish(int) override {
- if (msg)
- msg->mark_event("sub_op_applied");
- pg->sub_write_applied(tid, version, trace);
- }
-};
-void ECBackend::sub_write_applied(
- ceph_tid_t tid, eversion_t version,
- const ZTracer::Trace &trace) {
- parent->op_applied(version);
- if (get_parent()->pgb_is_primary()) {
- ECSubWriteReply reply;
- reply.from = get_parent()->whoami_shard();
- reply.tid = tid;
- reply.applied = true;
- handle_sub_write_reply(
- get_parent()->whoami_shard(),
- reply, trace);
- } else {
- MOSDECSubOpWriteReply *r = new MOSDECSubOpWriteReply;
- r->pgid = get_parent()->primary_spg_t();
- r->map_epoch = get_parent()->get_epoch();
- r->min_epoch = get_parent()->get_interval_start_epoch();
- r->op.from = get_parent()->whoami_shard();
- r->op.tid = tid;
- r->op.applied = true;
- r->set_priority(CEPH_MSG_PRIO_HIGH);
- r->trace = trace;
- r->trace.event("sending sub op apply");
- get_parent()->send_message_osd_cluster(
- get_parent()->primary_shard().osd, r, get_parent()->get_epoch());
- }
-}
-
void ECBackend::handle_sub_write(
pg_shard_t from,
OpRequestRef msg,
this, msg, op.tid,
op.at_version,
get_parent()->get_info().last_complete, trace)));
- localt.register_on_applied(
- get_parent()->bless_context(
- new SubWriteApplied(this, msg, op.tid, op.at_version, trace)));
vector<ObjectStore::Transaction> tls;
tls.reserve(2);
tls.push_back(std::move(op.t));
tls.push_back(std::move(localt));
get_parent()->queue_transactions(tls, msg);
+ parent->op_applied(op.at_version);
}
void ECBackend::handle_sub_read(