]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
TrackedOp: do not require a Message when creating new Ops
authorGreg Farnum <greg@inktank.com>
Wed, 23 Apr 2014 00:01:13 +0000 (17:01 -0700)
committerSamuel Just <sam.just@inktank.com>
Mon, 5 May 2014 21:57:52 +0000 (14:57 -0700)
Further parameterize the template to allow passing in an arbitrary parameter,
and move all the Message-based event marking from there into OpRequest.

Signed-off-by: Greg Farnum <greg@inktank.com>
src/common/TrackedOp.h
src/osd/OSD.cc
src/osd/OpRequest.cc

index 6e22ec304cffb6874559d479b534ba65e8c1a051..2e620ce959e6bc321e83ebc7c2bbf17431e5770b 100644 (file)
@@ -106,17 +106,11 @@ public:
     assert(ops_in_flight.empty());
   }
 
-  template <typename T>
-  typename T::Ref create_request(Message *ref)
+  template <typename T, typename U>
+  typename T::Ref create_request(U params)
   {
-    typename T::Ref retval(new T(ref, this),
+    typename T::Ref retval(new T(params, this),
                           RemoveOnDelete(this));
-    
-    _mark_event(retval.get(), "header_read", ref->get_recv_stamp());
-    _mark_event(retval.get(), "throttled", ref->get_throttle_stamp());
-    _mark_event(retval.get(), "all_read", ref->get_recv_complete_stamp());
-    _mark_event(retval.get(), "dispatched", ref->get_dispatch_stamp());
-    
     return retval;
   }
 };
index 2d6379055b23dbd5438363eff28e47a5999b3cdb..c815e286dd415377bd9fa0844cdb97913f158a01 100644 (file)
@@ -4994,7 +4994,7 @@ void OSD::_dispatch(Message *m)
 
   default:
     {
-      OpRequestRef op = op_tracker.create_request<OpRequest>(m);
+      OpRequestRef op = op_tracker.create_request<OpRequest, Message*>(m);
       op->mark_event("waiting_for_osdmap");
       // no map?  starting up?
       if (!osdmap) {
index 603f8583066756f98624d2ebfa1a28002531a743..71eef177773e0e85ef913de663da7605e9cba1d2 100644 (file)
@@ -27,6 +27,10 @@ OpRequest::OpRequest(Message *req, OpTracker *tracker) :
   } else if (req->get_type() == MSG_OSD_SUBOP) {
     reqid = static_cast<MOSDSubOp*>(req)->reqid;
   }
+  tracker->_mark_event(this, "header_read", request->get_recv_stamp());
+  tracker->_mark_event(this, "throttled", request->get_throttle_stamp());
+  tracker->_mark_event(this, "all_read", request->get_recv_complete_stamp());
+  tracker->_mark_event(this, "dispatched", request->get_dispatch_stamp());
 }
 
 void OpRequest::_dump(utime_t now, Formatter *f) const