]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: clear OpHistory on shutdown
authorSamuel Just <sam.just@inktank.com>
Wed, 20 Mar 2013 18:49:29 +0000 (11:49 -0700)
committerSamuel Just <sam.just@inktank.com>
Fri, 22 Mar 2013 01:37:35 +0000 (18:37 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSD.cc
src/osd/OpRequest.cc
src/osd/OpRequest.h

index 0bbc840ca4ab3f3119fbdcb084b908687d7dfb0e..0163429afb6179a7dbc08706edef6d52d53e108c 100644 (file)
@@ -1294,6 +1294,7 @@ int OSD::shutdown()
 
   osdmap = OSDMapRef();
   service.shutdown();
+  op_tracker.on_shutdown();
 
   client_messenger->shutdown();
   cluster_messenger->shutdown();
index 2b44f16abebc335f88cfd2c4d775ec6f52002b76..d5ce8bbc74953cf2684c0249832d2d9c51ff0e67 100644 (file)
@@ -20,8 +20,16 @@ static ostream& _prefix(std::ostream* _dout)
   return *_dout << "--OSD::tracker-- ";
 }
 
-void OpHistory::insert(utime_t now, OpRequest *op)
+void OpHistory::on_shutdown()
 {
+  arrived.clear();
+  duration.clear();
+  shutdown = true;
+}
+
+void OpHistory::insert(utime_t now, OpRequestRef op)
+{
+  assert(!shutdown);
   duration.insert(make_pair(op->get_duration(), op));
   arrived.insert(make_pair(op->get_arrived(), op));
   cleanup(now);
@@ -108,7 +116,7 @@ void OpTracker::unregister_inflight_op(OpRequest *i)
   utime_t now = ceph_clock_now(g_ceph_context);
   i->xitem.remove_myself();
   i->request->clear_data();
-  history.insert(now, i);
+  history.insert(now, OpRequestRef(i));
 }
 
 bool OpTracker::check_ops_in_flight(std::vector<string> &warning_vector)
index 65f4cc471ea000c128507191e71390b80515bcea..ca419f34ff88c8170c7b5f5e4660502e15d1f640 100644 (file)
@@ -31,10 +31,17 @@ class OpHistory {
   set<pair<utime_t, OpRequestRef> > arrived;
   set<pair<double, OpRequestRef> > duration;
   void cleanup(utime_t now);
+  bool shutdown;
 
 public:
+  OpHistory() : shutdown(false) {}
+  ~OpHistory() {
+    assert(arrived.empty());
+    assert(duration.empty());
+  }
   void insert(utime_t now, OpRequestRef op);
   void dump_ops(utime_t now, Formatter *f);
+  void on_shutdown();
 };
 
 class OpTracker {
@@ -69,6 +76,13 @@ public:
   void mark_event(OpRequest *op, const string &evt);
   void _mark_event(OpRequest *op, const string &evt, utime_t now);
   OpRequestRef create_request(Message *req);
+  void on_shutdown() {
+    Mutex::Locker l(ops_in_flight_lock);
+    history.on_shutdown();
+  }
+  ~OpTracker() {
+    assert(ops_in_flight.empty());
+  }
 };
 
 /**