]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
TrackedOp: do not track a Message
authorGreg Farnum <greg@inktank.com>
Tue, 22 Apr 2014 22:53:53 +0000 (15:53 -0700)
committerSamuel Just <sam.just@inktank.com>
Mon, 5 May 2014 21:57:52 +0000 (14:57 -0700)
Give it to the OpRequest (currently, the only TrackedOp implementation).

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

index 626b7700b8e4ccfd016212d6c332dac7d5e5e643..7aa6a000af1f8957ed8d0b105d3de21e57e97f93 100644 (file)
@@ -167,8 +167,10 @@ bool OpTracker::check_ops_in_flight(std::vector<string> &warning_vector)
 
       utime_t age = now - (*i)->get_initiated();
       stringstream ss;
-      ss << "slow request " << age << " seconds old, received at " << (*i)->get_initiated()
-        << ": " << *((*i)->request) << " currently "
+      ss << "slow request " << age << " seconds old, received at "
+         << (*i)->get_initiated() << ": ";
+      (*i)->_dump_op_descriptor(ss);
+      ss << " currently "
         << ((*i)->current.size() ? (*i)->current : (*i)->state_string());
       warning_vector.push_back(ss.str());
 
@@ -231,10 +233,12 @@ void OpTracker::_mark_event(TrackedOp *op, const string &evt,
                            utime_t time)
 {
   Mutex::Locker locker(ops_in_flight_lock);
+  stringstream ss;
+  op->_dump_op_descriptor(ss);
   dout(5) << //"reqid: " << op->get_reqid() <<
             ", seq: " << op->seq
          << ", time: " << time << ", event: " << evt
-         << ", request: " << *op->request << dendl;
+         << ", op: " << ss.str() << dendl;
 }
 
 void OpTracker::RemoveOnDelete::operator()(TrackedOp *op) {
index 053cf8c043fea4151e637859948549469b2b6ced..6e22ec304cffb6874559d479b534ba65e8c1a051 100644 (file)
@@ -127,7 +127,6 @@ private:
   friend class OpTracker;
   xlist<TrackedOp*>::item xitem;
 protected:
-  Message *request; /// the logical request we are tracking
   OpTracker *tracker; /// the tracker we are associated with
 
   utime_t initiated_at;
@@ -138,9 +137,8 @@ protected:
 
   uint32_t warn_interval_multiplier; // limits output of a given op warning
 
-  TrackedOp(Message *req, OpTracker *_tracker, const utime_t& initiated) :
+  TrackedOp(OpTracker *_tracker, const utime_t& initiated) :
     xitem(this),
-    request(req),
     tracker(_tracker),
     initiated_at(initiated),
     lock("TrackedOp::lock"),
@@ -160,7 +158,7 @@ protected:
   virtual void _unregistered() {};
 
 public:
-  virtual ~TrackedOp() { assert(request); request->put(); }
+  virtual ~TrackedOp() {}
 
   const utime_t& get_initiated() const {
     return initiated_at;
@@ -171,7 +169,6 @@ public:
       (events.rbegin()->first - get_initiated()) :
       0.0;
   }
-  Message *get_req() const { return request; }
 
   void mark_event(const string &event);
   virtual const char *state_string() const {
index a8b9b743754cb20265c28bd666119b8b333dec6e..603f8583066756f98624d2ebfa1a28002531a743 100644 (file)
@@ -15,8 +15,8 @@
 
 
 OpRequest::OpRequest(Message *req, OpTracker *tracker) :
-  TrackedOp(req, tracker, req->get_recv_stamp()),
-  rmw_flags(0),
+  TrackedOp(tracker, req->get_recv_stamp()),
+  rmw_flags(0), request(req),
   hit_flag_points(0), latest_flag_point(0) {
   if (req->get_priority() < tracker->cct->_conf->osd_client_op_priority) {
     // don't warn as quickly for low priority ops
index 3840d0e6fb540db0ef8eaac50d88f849ef328bc4..36a17321eed343270aefa909afb8f97ceeffaa89 100644 (file)
@@ -75,6 +75,7 @@ struct OpRequest : public TrackedOp {
   void _dump(utime_t now, Formatter *f) const;
 
 private:
+  Message *request; /// the logical request we are tracking
   osd_reqid_t reqid;
   uint8_t hit_flag_points;
   uint8_t latest_flag_point;
@@ -93,6 +94,10 @@ protected:
   void _unregistered();
 
 public:
+  ~OpRequest() {
+    request->put();
+  }
+  Message *get_req() const { return request; }
   bool been_queued_for_pg() { return hit_flag_points & flag_queued_for_pg; }
   bool been_reached_pg() { return hit_flag_points & flag_reached_pg; }
   bool been_delayed() { return hit_flag_points & flag_delayed; }