if (tag_inb)
osd->logger->inc(tag_inb, inb);
osd->logger->tinc(tag_lat, latency);
-
- dout(15) << "log_subop_stats " << *op->request << " inb " << inb << " latency " << latency << dendl;
}
}
}
+struct C_OnPushCommit : public Context {
+ ReplicatedPG *pg;
+ OpRequestRef op;
+ C_OnPushCommit(ReplicatedPG *pg, OpRequestRef op) : pg(pg), op(op) {}
+ void finish(int) {
+ op->mark_event("committed");
+ pg->log_subop_stats(op, l_osd_push_inb, l_osd_sop_push_lat);
+ }
+};
+
void ReplicatedPG::handle_push(OpRequestRef op)
{
MOSDSubOp *m = static_cast<MOSDSubOp *>(op->request);
m->omap_entries,
t);
+ t->register_on_commit(new C_OnPushCommit(this, op));
int r = osd->store->
queue_transaction(
osr.get(), t,
onreadable,
new C_OSD_CommittedPushedObject(
- this, op,
+ this,
get_osdmap()->get_epoch(),
info.last_complete),
onreadable_sync,
void ReplicatedPG::_committed_pushed_object(
- OpRequestRef op, epoch_t epoch, eversion_t last_complete)
+ epoch_t epoch, eversion_t last_complete)
{
lock();
if (!pg_has_reset_since(epoch)) {
dout(10) << "_committed_pushed_object pg has changed, not touching last_complete_ondisk" << dendl;
}
- if (op) {
- log_subop_stats(op, l_osd_sop_push_inb, l_osd_sop_push_lat);
- op->mark_event("committed");
- }
-
unlock();
}
friend class C_OSD_OpCommit;
friend class C_OSD_OpApplied;
+ friend class C_OnPushCommit;
// projected object info
map<hobject_t, ObjectContext*> object_contexts;
};
struct C_OSD_CommittedPushedObject : public Context {
ReplicatedPGRef pg;
- OpRequestRef op;
epoch_t epoch;
eversion_t last_complete;
C_OSD_CommittedPushedObject(
- ReplicatedPG *p, OpRequestRef o, epoch_t epoch, eversion_t lc) :
- pg(p), op(o), epoch(epoch), last_complete(lc) {
+ ReplicatedPG *p, epoch_t epoch, eversion_t lc) :
+ pg(p), epoch(epoch), last_complete(lc) {
}
void finish(int r) {
- pg->_committed_pushed_object(op, epoch, last_complete);
+ pg->_committed_pushed_object(epoch, last_complete);
}
};
struct C_OSD_CompletedPushedObjectReplica : public Context {
void sub_op_modify_reply(OpRequestRef op);
void _applied_recovered_object(ObjectStore::Transaction *t, ObjectContext *obc);
void _applied_recovered_object_replica(ObjectStore::Transaction *t);
- void _committed_pushed_object(OpRequestRef op, epoch_t epoch, eversion_t lc);
+ void _committed_pushed_object(epoch_t epoch, eversion_t lc);
void recover_got(hobject_t oid, eversion_t v);
void sub_op_push(OpRequestRef op);
void _failed_push(OpRequestRef op);