osdmap = OSDMapRef();
service.shutdown();
+ op_tracker.on_shutdown();
client_messenger->shutdown();
cluster_messenger->shutdown();
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);
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)
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 {
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());
+ }
};
/**