From d9616d6795acfd65a52a8b7e60f22ad0d9668ffa Mon Sep 17 00:00:00 2001 From: Zhiqiang Wang <zhiqiang.wang@intel.com> Date: Fri, 27 Mar 2015 16:06:26 +0800 Subject: [PATCH 1/3] common/TrackedOp: break out of loop when reaching log threshold When the number of warned ops reaches the log threshold, should break out of the outer for loop as well. Signed-off-by: Zhiqiang Wang <zhiqiang.wang@intel.com> --- src/common/TrackedOp.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/common/TrackedOp.cc b/src/common/TrackedOp.cc index 32dbc5398dc..727811a979d 100644 --- a/src/common/TrackedOp.cc +++ b/src/common/TrackedOp.cc @@ -191,7 +191,8 @@ bool OpTracker::check_ops_in_flight(std::vector<string> &warning_vector) int slow = 0; // total slow int warned = 0; // total logged - for (uint32_t iter = 0; iter < num_optracker_shards; iter++) { + for (uint32_t iter = 0; + iter < num_optracker_shards && warned < log_threshold; iter++) { ShardedTrackingData* sdata = sharded_in_flight_list[iter]; assert(NULL != sdata); Mutex::Locker locker(sdata->ops_in_flight_lock_sharded); From ec3c40952bbc4b495875e08b57d764a7487c6c09 Mon Sep 17 00:00:00 2001 From: Zhiqiang Wang <zhiqiang.wang@intel.com> Date: Mon, 30 Mar 2015 14:41:21 +0800 Subject: [PATCH 2/3] common/OpTracker: don't dump ops if tracking is not enabled If tracking is disabled, there is nothing to dump. No need to go through each sharded list. This is true for both in flight and historical ops. Signed-off-by: Zhiqiang Wang <zhiqiang.wang@intel.com> --- src/mds/MDS.cc | 12 ++++++++++-- src/osd/OSD.cc | 12 ++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 7462c82129b..1679328a1a8 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -242,9 +242,17 @@ bool MDS::asok_command(string command, cmdmap_t& cmdmap, string format, f->dump_string("error", "mds_not_active"); } else if (command == "dump_ops_in_flight" || command == "ops") { - op_tracker.dump_ops_in_flight(f); + if (!op_tracker.tracking_enabled) { + ss << "op_tracker tracking is not enabled"; + } else { + op_tracker.dump_ops_in_flight(f); + } } else if (command == "dump_historic_ops") { - op_tracker.dump_historic_ops(f); + if (!op_tracker.tracking_enabled) { + ss << "op_tracker tracking is not enabled"; + } else { + op_tracker.dump_historic_ops(f); + } } else if (command == "osdmap barrier") { int64_t target_epoch = 0; bool got_val = cmd_getval(g_ceph_context, cmdmap, "target_epoch", target_epoch); diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index f6be098442c..4b6a7d69a0b 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1635,9 +1635,17 @@ bool OSD::asok_command(string command, cmdmap_t& cmdmap, string format, store->sync_and_flush(); } else if (command == "dump_ops_in_flight" || command == "ops") { - op_tracker.dump_ops_in_flight(f); + if (!op_tracker.tracking_enabled) { + ss << "op_tracker tracking is not enabled"; + } else { + op_tracker.dump_ops_in_flight(f); + } } else if (command == "dump_historic_ops") { - op_tracker.dump_historic_ops(f); + if (!op_tracker.tracking_enabled) { + ss << "op_tracker tracking is not enabled"; + } else { + op_tracker.dump_historic_ops(f); + } } else if (command == "dump_op_pq_state") { f->open_object_section("pq"); op_shardedwq.dump(f); From 7509a6caa4964d71625c43f2ddc10e6274b6a21b Mon Sep 17 00:00:00 2001 From: Zhiqiang Wang <zhiqiang.wang@intel.com> Date: Mon, 30 Mar 2015 15:25:34 +0800 Subject: [PATCH 3/3] common/TrackedOp: checking in flight ops fix Return earlier if tracking is not enabled when checking in flight ops. Signed-off-by: Zhiqiang Wang <zhiqiang.wang@intel.com> --- src/common/TrackedOp.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/common/TrackedOp.cc b/src/common/TrackedOp.cc index 727811a979d..fbd30b81528 100644 --- a/src/common/TrackedOp.cc +++ b/src/common/TrackedOp.cc @@ -152,6 +152,9 @@ void OpTracker::unregister_inflight_op(TrackedOp *i) bool OpTracker::check_ops_in_flight(std::vector<string> &warning_vector) { + if (!tracking_enabled) + return false; + utime_t now = ceph_clock_now(cct); utime_t too_old = now; too_old -= complaint_time;