From 17a192ba5cdbe21293bfae88283af116095a1b62 Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Mon, 23 Oct 2017 13:19:06 +0800 Subject: [PATCH] common/TrackedOp: make tracking_enabled atomic without lock protect Signed-off-by: Haomai Wang --- src/common/TrackedOp.cc | 12 ++++++------ src/common/TrackedOp.h | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/common/TrackedOp.cc b/src/common/TrackedOp.cc index bd605e54cc7c6..c89be0b60a333 100644 --- a/src/common/TrackedOp.cc +++ b/src/common/TrackedOp.cc @@ -158,10 +158,10 @@ OpTracker::~OpTracker() { bool OpTracker::dump_historic_ops(Formatter *f, bool by_duration, set filters) { - RWLock::RLocker l(lock); if (!tracking_enabled) return false; + RWLock::RLocker l(lock); utime_t now = ceph_clock_now(); if (by_duration) { history.dump_ops_by_duration(now, f, filters); @@ -197,10 +197,10 @@ void OpHistory::dump_slow_ops(utime_t now, Formatter *f, set filters) bool OpTracker::dump_historic_slow_ops(Formatter *f, set filters) { - RWLock::RLocker l(lock); if (!tracking_enabled) return false; + RWLock::RLocker l(lock); utime_t now = ceph_clock_now(); history.dump_slow_ops(now, f, filters); return true; @@ -208,10 +208,10 @@ bool OpTracker::dump_historic_slow_ops(Formatter *f, set filters) bool OpTracker::dump_ops_in_flight(Formatter *f, bool print_only_blocked, set filters) { - RWLock::RLocker l(lock); if (!tracking_enabled) return false; + RWLock::RLocker l(lock); f->open_object_section("ops_in_flight"); // overall dump uint64_t total_ops_in_flight = 0; f->open_array_section("ops"); // list of TrackedOps @@ -243,10 +243,10 @@ bool OpTracker::dump_ops_in_flight(Formatter *f, bool print_only_blocked, set_unregistered(); - RWLock::RLocker l(lock); if (!tracking_enabled) delete i; else { + RWLock::RLocker l(lock); i->state = TrackedOp::STATE_HISTORY; utime_t now = ceph_clock_now(); history.insert(now, TrackedOpRef(i)); @@ -286,10 +286,10 @@ void OpTracker::unregister_inflight_op(TrackedOp *i) bool OpTracker::check_ops_in_flight(std::vector &warning_vector, int *slow) { - RWLock::RLocker l(lock); if (!tracking_enabled) return false; + RWLock::RLocker l(lock); utime_t now = ceph_clock_now(); utime_t too_old = now; too_old -= complaint_time; diff --git a/src/common/TrackedOp.h b/src/common/TrackedOp.h index 9435a1913c063..d619dc4e7b484 100644 --- a/src/common/TrackedOp.h +++ b/src/common/TrackedOp.h @@ -69,7 +69,7 @@ class OpTracker { OpHistory history; float complaint_time; int log_threshold; - bool tracking_enabled; + std::atomic tracking_enabled; RWLock lock; public: @@ -87,7 +87,6 @@ public: history.set_slow_op_size_and_threshold(new_size, new_threshold); } void set_tracking(bool enable) { - RWLock::WLocker l(lock); tracking_enabled = enable; } bool dump_ops_in_flight(Formatter *f, bool print_only_blocked = false, set filters = {""}); -- 2.39.5