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
} 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)
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<TrackedOp*>::item *i);
void unregister_inflight_op(TrackedOp *i);
{
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;
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);
}
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");