From: Greg Farnum Date: Wed, 23 Apr 2014 00:01:13 +0000 (-0700) Subject: TrackedOp: do not require a Message when creating new Ops X-Git-Tag: v0.82~82^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e2b62bc35345f72cb4a7d057bbc6ddb6721dfb3c;p=ceph.git TrackedOp: do not require a Message when creating new Ops 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 --- diff --git a/src/common/TrackedOp.h b/src/common/TrackedOp.h index 6e22ec304cff..2e620ce959e6 100644 --- a/src/common/TrackedOp.h +++ b/src/common/TrackedOp.h @@ -106,17 +106,11 @@ public: assert(ops_in_flight.empty()); } - template - typename T::Ref create_request(Message *ref) + template + 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; } }; diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 2d6379055b23..c815e286dd41 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -4994,7 +4994,7 @@ void OSD::_dispatch(Message *m) default: { - OpRequestRef op = op_tracker.create_request(m); + OpRequestRef op = op_tracker.create_request(m); op->mark_event("waiting_for_osdmap"); // no map? starting up? if (!osdmap) { diff --git a/src/osd/OpRequest.cc b/src/osd/OpRequest.cc index 603f85830667..71eef177773e 100644 --- a/src/osd/OpRequest.cc +++ b/src/osd/OpRequest.cc @@ -27,6 +27,10 @@ OpRequest::OpRequest(Message *req, OpTracker *tracker) : } else if (req->get_type() == MSG_OSD_SUBOP) { reqid = static_cast(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