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;