From: David Zafman Date: Fri, 11 Mar 2016 05:30:43 +0000 (-0800) Subject: CLEANUP: Move locking into dump_ops_in_flight()/dump_historic_ops() X-Git-Tag: v10.1.1~105^2^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=17c645f70708134f50374cadb5505b0babe2265a;p=ceph.git CLEANUP: Move locking into dump_ops_in_flight()/dump_historic_ops() Signed-off-by: David Zafman --- diff --git a/src/common/TrackedOp.cc b/src/common/TrackedOp.cc index 37e918ad5f7..9ce9d8493da 100644 --- a/src/common/TrackedOp.cc +++ b/src/common/TrackedOp.cc @@ -87,14 +87,23 @@ 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) { + RWLock::RLocker l(lock); + 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) { + RWLock::RLocker l(lock); + 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 +128,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::item *i) diff --git a/src/common/TrackedOp.h b/src/common/TrackedOp.h index c1d8eb6ad6f..14ac32ea88f 100644 --- a/src/common/TrackedOp.h +++ b/src/common/TrackedOp.h @@ -104,8 +104,8 @@ public: RWLock::WLocker l(lock); tracking_enabled = enable; } - 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::item *i); void unregister_inflight_op(TrackedOp *i); diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index fb4ed0fcb91..71e49258434 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -1666,28 +1666,19 @@ bool MDSRankDispatcher::handle_asok_command( { if (command == "dump_ops_in_flight" || command == "ops") { - RWLock::RLocker l(op_tracker.lock); - 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") { - RWLock::RLocker l(op_tracker.lock); - 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 == "osdmap barrier") { int64_t target_epoch = 0; diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 84a6112cd62..f0e38d145a5 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -332,7 +332,7 @@ void Monitor::do_admin_command(string command, cmdmap_t& cmdmap, string format, elector.stop_participating(); ss << "stopped responding to quorum, initiated new election"; } else if (command == "ops") { - op_tracker.dump_ops_in_flight(f.get()); + (void)op_tracker.dump_ops_in_flight(f.get()); if (f) { f->flush(ss); } diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index a6d90dcd9ed..eed0f4e2cb2 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1707,29 +1707,19 @@ bool OSD::asok_command(string command, cmdmap_t& cmdmap, string format, store->flush_journal(); } else if (command == "dump_ops_in_flight" || command == "ops") { - RWLock::RLocker l(op_tracker.lock); - 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") { - RWLock::RLocker l(op_tracker.lock); - 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");