return true;
}
-void OpTracker::register_inflight_op(xlist<TrackedOp*>::item *i)
+bool OpTracker::register_inflight_op(xlist<TrackedOp*>::item *i)
{
- // caller checks;
- assert(tracking_enabled);
+ RWLock::RLocker l(lock);
+ if (!tracking_enabled)
+ return false;
uint64_t current_seq = seq.inc();
uint32_t shard_index = current_seq % num_optracker_shards;
sdata->ops_in_flight_sharded.push_back(i);
sdata->ops_in_flight_sharded.back()->seq = current_seq;
}
+ return true;
}
void OpTracker::unregister_inflight_op(TrackedOp *i)
float complaint_time;
int log_threshold;
void _mark_event(TrackedOp *op, const string &evt, utime_t now);
+ bool tracking_enabled;
+ RWLock lock;
public:
- bool tracking_enabled;
CephContext *cct;
- RWLock lock;
OpTracker(CephContext *cct_, bool tracking, uint32_t num_shards) : seq(0),
num_optracker_shards(num_shards),
complaint_time(0), log_threshold(0),
- tracking_enabled(tracking), cct(cct_),
- lock("OpTracker::lock") {
+ tracking_enabled(tracking),
+ lock("OpTracker::lock"), cct(cct_) {
for (uint32_t i = 0; i < num_optracker_shards; i++) {
char lock_name[32] = {0};
}
bool dump_ops_in_flight(Formatter *f, bool print_only_blocked=false);
bool dump_historic_ops(Formatter *f);
- void register_inflight_op(xlist<TrackedOp*>::item *i);
+ bool register_inflight_op(xlist<TrackedOp*>::item *i);
void unregister_inflight_op(TrackedOp *i);
void get_age_ms_histogram(pow2_hist_t *h);
}
void dump(utime_t now, Formatter *f) const;
void tracking_start() {
- RWLock::RLocker l(tracker->lock);
- if (tracker->tracking_enabled) {
- tracker->register_inflight_op(&xitem);
+ if (tracker->register_inflight_op(&xitem)) {
events.push_back(make_pair(initiated_at, "initiated"));
is_tracked = true;
}