From 55f8900ebf66e49b9e38c68004e1b9f31dd5c89e Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Tue, 4 Aug 2020 15:20:46 +0800 Subject: [PATCH] crimson/admin: read non-string settings as well before this change, we were using local_conf().get_val(var); for reading a setting when serving a "config get" command even if the setting being queried is a non-string. so without this change, a failure is returned complaining "unrecognized option..." in this change: * use get_val(string,string*) for querying the string representation of the queried setting * drop the check for existence of "var" parameter, validate_cmd() always take care of this. Signed-off-by: Kefu Chai --- src/crimson/admin/admin_socket.cc | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/crimson/admin/admin_socket.cc b/src/crimson/admin/admin_socket.cc index d70eb28fd3b..5c3da6fa5d1 100644 --- a/src/crimson/admin/admin_socket.cc +++ b/src/crimson/admin/admin_socket.cc @@ -452,25 +452,21 @@ public: ceph::bufferlist&& input) const final { std::string var; - if (!cmd_getval(cmdmap, "var", var)) { - // should have been caught by 'validate()' - return seastar::make_ready_future( - tell_result_t{-EINVAL, "syntax error: 'config get '"}); - } - try { - unique_ptr f{Formatter::create(format, - "json-pretty", - "json-pretty")}; - f->open_object_section("config_get"); - std::string conf_val = - local_conf().get_val(var); - f->dump_string(var.c_str(), conf_val.c_str()); - f->close_section(); - return seastar::make_ready_future(f.get()); - } catch (const boost::bad_get&) { + [[maybe_unused]] bool found = cmd_getval(cmdmap, "var", var); + assert(found); + std::string conf_val; + if (int r = local_conf().get_val(var, &conf_val); r < 0) { return seastar::make_ready_future( - tell_result_t{-EINVAL, fmt::format("unrecognized option {}", var)}); + tell_result_t{r, fmt::format("error getting {}: {}", + var, cpp_strerror(r))}); } + unique_ptr f{Formatter::create(format, + "json-pretty", + "json-pretty")}; + f->open_object_section("config_get"); + f->dump_string(var, conf_val); + f->close_section(); + return seastar::make_ready_future(f.get()); } }; -- 2.39.5