void OpTracker::register_inflight_op(xlist<TrackedOp*>::item *i)
{
+ if (!tracking_enabled)
+ return;
Mutex::Locker locker(ops_in_flight_lock);
ops_in_flight.push_back(i);
ops_in_flight.back()->seq = seq++;
void OpTracker::unregister_inflight_op(TrackedOp *i)
{
+ i->request->clear_data();
+
+ if (!tracking_enabled)
+ return;
+
Mutex::Locker locker(ops_in_flight_lock);
assert(i->xitem.get_list() == &ops_in_flight);
utime_t now = ceph_clock_now(cct);
i->xitem.remove_myself();
- i->request->clear_data();
history.insert(now, TrackedOpRef(i));
}
bool OpTracker::check_ops_in_flight(std::vector<string> &warning_vector)
{
Mutex::Locker locker(ops_in_flight_lock);
- if (!ops_in_flight.size())
+ if (!ops_in_flight.size()) // this covers tracking_enabled, too
return false;
utime_t now = ceph_clock_now(cct);
void OpTracker::mark_event(TrackedOp *op, const string &dest)
{
+ if (!tracking_enabled)
+ return;
utime_t now = ceph_clock_now(cct);
return _mark_event(op, dest, now);
}
}
void OpTracker::RemoveOnDelete::operator()(TrackedOp *op) {
+ if (!tracker->tracking_enabled) {
+ op->request->clear_data();
+ delete op;
+ return;
+ }
op->mark_event("done");
tracker->unregister_inflight_op(op);
// Do not delete op, unregister_inflight_op took control
int log_threshold;
public:
+ bool tracking_enabled;
CephContext *cct;
- OpTracker(CephContext *cct_) : seq(0), ops_in_flight_lock("OpTracker mutex"),
- complaint_time(0), log_threshold(0), cct(cct_) {}
+ OpTracker(CephContext *cct_, bool tracking) : seq(0), ops_in_flight_lock("OpTracker mutex"),
+ complaint_time(0), log_threshold(0),
+ tracking_enabled(tracking), cct(cct_) {}
void set_complaint_and_threshold(float time, int threshold) {
complaint_time = time;
log_threshold = threshold;
OPTION(osd_debug_verify_snaps_on_info, OPT_BOOL, false)
OPTION(osd_debug_verify_stray_on_activate, OPT_BOOL, false)
OPTION(osd_debug_skip_full_check_in_backfill_reservation, OPT_BOOL, false)
+OPTION(osd_enable_op_tracker, OPT_BOOL, true) // enable/disable OSD op tracking
OPTION(osd_op_history_size, OPT_U32, 20) // Max number of completed ops to track
OPTION(osd_op_history_duration, OPT_U32, 600) // Oldest completed op to track
OPTION(osd_target_transaction_size, OPT_INT, 30) // to adjust various transactions that batch smaller items
heartbeat_dispatcher(this),
stat_lock("OSD::stat_lock"),
finished_lock("OSD::finished_lock"),
- op_tracker(cct),
+ op_tracker(cct, cct->_conf->osd_enable_op_tracker),
test_ops_hook(NULL),
op_wq(this, cct->_conf->osd_op_thread_timeout, &op_tp),
peering_wq(this, cct->_conf->osd_op_thread_timeout, &op_tp),