From: Venky Shankar Date: Mon, 5 Nov 2018 05:51:53 +0000 (-0500) Subject: mds: dump scrub formatted output when context completion X-Git-Tag: v14.1.0~502^2~4 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=0f001a8e0cbdc213d79d9b35839cba97c84830de;p=ceph-ci.git mds: dump scrub formatted output when context completion Include scrub tag as part of the output and move the formatting in context completion to support scrub opeation triggered via tell interface (introduced later). Signed-off-by: Venky Shankar --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 2d841f77174..eb9aacfa3f3 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -12310,12 +12310,13 @@ void C_MDS_RetryRequest::finish(int r) 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; @@ -12324,7 +12325,17 @@ public: } 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 @@ -12350,8 +12361,6 @@ void MDCache::enqueue_scrub( 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()) { @@ -12361,18 +12370,12 @@ void MDCache::enqueue_scrub( is_internal = true; } + C_MDS_EnqueueScrub *cs = new C_MDS_EnqueueScrub(tag_str, f, fin); cs->header = std::make_shared( 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)