]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedPG: _committed_pushed_object don't pass op
authorSamuel Just <sam.just@inktank.com>
Wed, 12 Jun 2013 20:27:12 +0000 (13:27 -0700)
committerSamuel Just <sam.just@inktank.com>
Mon, 8 Jul 2013 23:43:30 +0000 (16:43 -0700)
Add a separate callback to handle marking the event and
the stats.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index c5f2036a2d1b5f22e4b1938dd223a7de65e80bd3..f01425b4414cf05727cf065bc8985d50bc689766 100644 (file)
@@ -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<MOSDSubOp *>(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();
 }
 
index 36b737aaf39b5318aa1ff0b9d0e2cd3bddbd7aa4..c8b6e15bb843b67a2ed09dd5b34ea3901d349590 100644 (file)
@@ -440,6 +440,7 @@ protected:
 
   friend class C_OSD_OpCommit;
   friend class C_OSD_OpApplied;
+  friend class C_OnPushCommit;
 
   // projected object info
   map<hobject_t, ObjectContext*> 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);