]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
CLEANUP: Move locking into dump_ops_in_flight()/dump_historic_ops()
authorDavid Zafman <dzafman@redhat.com>
Tue, 12 Jul 2016 00:58:22 +0000 (17:58 -0700)
committerDavid Zafman <dzafman@redhat.com>
Wed, 23 Nov 2016 22:12:51 +0000 (14:12 -0800)
Signed-off-by: David Zafman <dzafman@redhat.com>
(cherry picked from commit 17c645f70708134f50374cadb5505b0babe2265a)

Conflicts:
src/mds/MDSRank.cc (variation of code exists in mds/MDS.cc)
src/mon/Monitor.cc (no equivalent code here)

src/common/TrackedOp.cc
src/common/TrackedOp.h
src/mds/MDS.cc
src/osd/OSD.cc

index e55ad3e6d06d9c2623e7a486e1501aad1750631a..c5d36dfe258966e09bbcd31b2ab78e1f62ab4426 100644 (file)
@@ -87,14 +87,21 @@ void OpHistory::dump_ops(utime_t now, Formatter *f)
   f->close_section();
 }
 
-void OpTracker::dump_historic_ops(Formatter *f)
+bool OpTracker::dump_historic_ops(Formatter *f)
 {
+  if (!tracking_enabled)
+    return false;
+
   utime_t now = ceph_clock_now(cct);
   history.dump_ops(now, f);
+  return true;
 }
 
-void OpTracker::dump_ops_in_flight(Formatter *f, bool print_only_blocked)
+bool OpTracker::dump_ops_in_flight(Formatter *f, bool print_only_blocked)
 {
+  if (!tracking_enabled)
+    return false;
+
   f->open_object_section("ops_in_flight"); // overall dump
   uint64_t total_ops_in_flight = 0;
   f->open_array_section("ops"); // list of TrackedOps
@@ -119,6 +126,7 @@ void OpTracker::dump_ops_in_flight(Formatter *f, bool print_only_blocked)
   } else
     f->dump_int("num_ops", total_ops_in_flight);
   f->close_section(); // overall dump
+  return true;
 }
 
 void OpTracker::register_inflight_op(xlist<TrackedOp*>::item *i)
index 0f406a20ce10033fc42592ed16ac5c1a95814092..fb21517d58f0c35c88313847a8ad3c9736d2d92b 100644 (file)
@@ -97,8 +97,8 @@ public:
   void set_history_size_and_duration(uint32_t new_size, uint32_t new_duration) {
     history.set_size_and_duration(new_size, new_duration);
   }
-  void dump_ops_in_flight(Formatter *f, bool print_only_blocked=false);
-  void dump_historic_ops(Formatter *f);
+  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);
   void unregister_inflight_op(TrackedOp *i);
 
index 66232acbb9df88a8d386e8bfcd3d0ccffff2ebba..cc64a3e16110355e6c98056fc6d4d027b72d76d9 100644 (file)
@@ -242,16 +242,12 @@ 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") {
-      if (!op_tracker.tracking_enabled) {
+      if (!op_tracker.dump_ops_in_flight(f)) {
         ss << "op_tracker tracking is not enabled";
-      } else {
-        op_tracker.dump_ops_in_flight(f);
       }
     } else if (command == "dump_historic_ops") {
-      if (!op_tracker.tracking_enabled) {
+      if (!op_tracker.dump_historic_ops(f)) {
        ss << "op_tracker tracking is not enabled";
-      } else {
-        op_tracker.dump_historic_ops(f);
       }
     } else if (command == "osdmap barrier") {
       int64_t target_epoch = 0;
index 3892b366f12f3a2420d0fee47ead939375455f30..8dd1600a2ac9a56d5fbf872aa01cf3029a1fbf56 100644 (file)
@@ -1685,27 +1685,19 @@ bool OSD::asok_command(string command, cmdmap_t& cmdmap, string format,
     store->sync_and_flush();
   } else if (command == "dump_ops_in_flight" ||
             command == "ops") {
-    if (!op_tracker.tracking_enabled) {
+    if (!op_tracker.dump_ops_in_flight(f)) {
       ss << "op_tracker tracking is not enabled now, so no ops are tracked currently, even those get stuck. \
        Please enable \"osd_enable_op_tracker\", and the tracker will start to track new ops received afterwards.";
-    } else {
-      op_tracker.dump_ops_in_flight(f);
     }
   } else if (command == "dump_blocked_ops") {
-    RWLock::RLocker l(op_tracker.lock);
-    if (!op_tracker.tracking_enabled) {
+    if (!op_tracker.dump_ops_in_flight(f, true)) {
       ss << "op_tracker tracking is not enabled now, so no ops are tracked currently, even those get stuck. \
        Please enable \"osd_enable_op_tracker\", and the tracker will start to track new ops received afterwards.";
-    } else {
-      op_tracker.dump_ops_in_flight(f, true);
     }
-
   } else if (command == "dump_historic_ops") {
-    if (!op_tracker.tracking_enabled) {
+    if (!op_tracker.dump_historic_ops(f)) {
       ss << "op_tracker tracking is not enabled now, so no ops are tracked currently, even those get stuck. \
        Please enable \"osd_enable_op_tracker\", and the tracker will start to track new ops received afterwards.";
-    } else {
-      op_tracker.dump_historic_ops(f);
     }
   } else if (command == "dump_op_pq_state") {
     f->open_object_section("pq");