f->close_section();
} else if (command == "dump_objectstore_kv_stats") {
store->get_db_statistics(f);
+ } else if (command == "dump_scrubs") {
+ service.dumps_scrub(f);
} else {
assert(0 == "broken asok registration");
}
"get malloc extension heap property");
assert(r == 0);
- r = admin_socket->register_command("dump_objectstore_kv_stats", "dump_objectstore_kv_stats", asok_hook,
- "print statistics of kvdb which used by bluestore");
+ r = admin_socket->register_command("dump_objectstore_kv_stats",
+ "dump_objectstore_kv_stats",
+ asok_hook,
+ "print statistics of kvdb which used by bluestore");
+ assert(r == 0);
+
+ r = admin_socket->register_command("dump_scrubs",
+ "dump_scrubs",
+ asok_hook,
+ "print scheduled scrubs");
assert(r == 0);
test_ops_hook = new TestOpsSocketHook(&(this->service), this->store);
return true;
}
+ void dumps_scrub(Formatter *f) {
+ assert(f != nullptr);
+ Mutex::Locker l(sched_scrub_lock);
+
+ f->open_array_section("scrubs");
+ for (const auto &i: sched_scrub_pg) {
+ f->open_object_section("scrub");
+ f->dump_stream("pgid") << i.pgid;
+ f->dump_stream("sched_time") << i.sched_time;
+ f->dump_stream("deadline") << i.deadline;
+ f->dump_bool("forced", i.sched_time == i.deadline);
+ f->close_section();
+ }
+ f->close_section();
+ }
+
bool can_inc_scrubs_pending();
bool inc_scrubs_pending();
void inc_scrubs_active(bool reserved);