std::string tag;
Formatter *formatter;
Context *on_finish;
+ bool dump_values;
public:
ScrubHeaderRef header;
- C_MDS_EnqueueScrub(std::string_view tag, Formatter *f, Context *fin) :
- tag(tag), formatter(f), on_finish(fin), header(nullptr) {}
+ C_MDS_EnqueueScrub(std::string_view tag, Formatter *f, Context *fin,
+ bool dump_values = true) :
+ tag(tag), formatter(f), on_finish(fin), dump_values(dump_values),
+ header(nullptr) {}
void finish(int r) override {
- formatter->open_object_section("results");
- formatter->dump_int("return_code", r);
- if (r == 0) {
- formatter->dump_string("scrub_tag", tag);
- formatter->dump_string("mode", "asynchronous");
+ if (dump_values) {
+ formatter->open_object_section("results");
+ formatter->dump_int("return_code", r);
+ if (r == 0) {
+ formatter->dump_string("scrub_tag", tag);
+ formatter->dump_string("mode", "asynchronous");
+ }
+ formatter->close_section();
}
- formatter->close_section();
r = 0;
if (on_finish)
std::string_view path,
std::string_view tag,
bool force, bool recursive, bool repair,
- Formatter *f, Context *fin)
+ bool scrub_mdsdir, Formatter *f, Context *fin)
{
dout(10) << __func__ << " " << path << dendl;
bool is_internal = false;
std::string tag_str(tag);
- if (tag_str.empty()) {
- uuid_d uuid_gen;
- uuid_gen.generate_random();
- tag_str = uuid_gen.to_string();
+ C_MDS_EnqueueScrub *cs;
+ if ((path == "~mdsdir" && scrub_mdsdir)) {
is_internal = true;
+ cs = new C_MDS_EnqueueScrub(tag_str, f, fin, false);
+ } else {
+ if (tag_str.empty()) {
+ uuid_d uuid_gen;
+ uuid_gen.generate_random();
+ tag_str = uuid_gen.to_string();
+ is_internal = true;
+ }
+ cs = new C_MDS_EnqueueScrub(tag_str, f, fin);
}
-
- C_MDS_EnqueueScrub *cs = new C_MDS_EnqueueScrub(tag_str, f, fin);
cs->header = std::make_shared<ScrubHeader>(tag_str, is_internal, force, recursive, repair);
mdr->internal_op_finish = cs;
*/
void enqueue_scrub(std::string_view path, std::string_view tag,
bool force, bool recursive, bool repair,
- Formatter *f, Context *fin);
+ bool scrub_mdsdir, Formatter *f, Context *fin);
void repair_inode_stats(CInode *diri);
void repair_dirfrag_stats(CDir *dir);
void rdlock_dirfrags_stats(CInode *diri, MDSInternalContext *fin);
std::lock_guard l(mds_lock);
if (scrub_mdsdir) {
MDSGatherBuilder gather(g_ceph_context);
- mdcache->enqueue_scrub("~mdsdir", tag, false, true, false, f, gather.new_sub());
+ mdcache->enqueue_scrub("~mdsdir", "", false, true, false, scrub_mdsdir,
+ f, gather.new_sub());
gather.set_finisher(new C_MDSInternalNoop);
gather.activate();
}
- mdcache->enqueue_scrub(path, tag, force, recursive, repair, f, on_finish);
+ mdcache->enqueue_scrub(path, tag, force, recursive, repair, scrub_mdsdir,
+ f, on_finish);
// scrub_dentry() finishers will dump the data for us; we're done!
}