class C_MDS_EnqueueScrub : public Context
{
+ std::string tag;
Formatter *formatter;
Context *on_finish;
public:
ScrubHeaderRef header;
- C_MDS_EnqueueScrub(Formatter *f, Context *fin) :
- formatter(f), on_finish(fin), header(nullptr) {}
+ C_MDS_EnqueueScrub(std::string_view tag, Formatter *f, Context *fin) :
+ tag(tag), formatter(f), on_finish(fin), header(nullptr) {}
Context *take_finisher() {
Context *fin = on_finish;
}
void finish(int r) override {
- if (r < 0) { // we failed the lookup or something; dump ourselves
+ if (r == 0) {
+ // since recursive scrub is asynchronous, dump minimal output
+ // to not upset cli tools.
+ if (header && header->get_recursive()) {
+ formatter->open_object_section("results");
+ formatter->dump_int("return_code", 0);
+ formatter->dump_string("scrub_tag", tag);
+ formatter->dump_string("mode", "asynchronous");
+ formatter->close_section(); // results
+ }
+ } else { // we failed the lookup or something; dump ourselves
formatter->open_object_section("results");
formatter->dump_int("return_code", r);
formatter->close_section(); // results
mdr->set_filepath(path);
}
- C_MDS_EnqueueScrub *cs = new C_MDS_EnqueueScrub(f, fin);
-
bool is_internal = false;
std::string tag_str(tag);
if (tag_str.empty()) {
is_internal = true;
}
+ 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, f);
mdr->internal_op_finish = cs;
enqueue_scrub_work(mdr);
-
- // since recursive scrub is asynchronous, dump minimal output
- // to not upset cli tools.
- if (recursive) {
- f->open_object_section("results");
- f->close_section(); // results
- }
}
void MDCache::enqueue_scrub_work(MDRequestRef& mdr)