From: Samuel Just Date: Wed, 12 Jun 2013 20:27:12 +0000 (-0700) Subject: ReplicatedPG: _committed_pushed_object don't pass op X-Git-Tag: v0.67-rc1~138^2~1^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=31e19a64b033ff6b96e27ebcd1953934c65f04bb;p=ceph.git ReplicatedPG: _committed_pushed_object don't pass op Add a separate callback to handle marking the event and the stats. Signed-off-by: Samuel Just --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index c5f2036a2d1..f01425b4414 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1183,8 +1183,6 @@ void ReplicatedPG::log_subop_stats(OpRequestRef op, int tag_inb, int tag_lat) 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; } @@ -5658,6 +5656,16 @@ void ReplicatedPG::handle_pull_response(OpRequestRef op) } } +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(op->request); @@ -5693,12 +5701,13 @@ void ReplicatedPG::handle_push(OpRequestRef op) 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, @@ -5981,7 +5990,7 @@ void ReplicatedPG::sub_op_pull(OpRequestRef op) 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)) { @@ -6006,11 +6015,6 @@ void ReplicatedPG::_committed_pushed_object( 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(); } diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index 36b737aaf39..c8b6e15bb84 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -440,6 +440,7 @@ protected: friend class C_OSD_OpCommit; friend class C_OSD_OpApplied; + friend class C_OnPushCommit; // projected object info map object_contexts; @@ -811,15 +812,14 @@ protected: }; 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 { @@ -870,7 +870,7 @@ protected: 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);