From: Kefu Chai Date: Sun, 2 Aug 2020 16:53:25 +0000 (+0800) Subject: crimson/admin: implement "injectargs" command X-Git-Tag: v16.1.0~1538^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=69de458e2ffd0421241033339ffd0a696ec54efb;p=ceph.git crimson/admin: implement "injectargs" command Signed-off-by: Kefu Chai --- diff --git a/src/crimson/admin/admin_socket.cc b/src/crimson/admin/admin_socket.cc index 40f7cc834c6f..07244fed84b4 100644 --- a/src/crimson/admin/admin_socket.cc +++ b/src/crimson/admin/admin_socket.cc @@ -3,6 +3,7 @@ #include "crimson/admin/admin_socket.h" +#include #include #include #include @@ -390,6 +391,30 @@ class GetdescsHook final : public AdminSocketHook { } }; +class InjectArgsHook final : public AdminSocketHook { +public: + InjectArgsHook() + : AdminSocketHook("injectargs", + "injectargs name=injected_args,type=CephString,n=N", + "inject configuration arguments into running daemon") + {} + seastar::future call(const cmdmap_t& cmdmap, + std::string_view format, + ceph::bufferlist&&) const final + { + std::vector argv; + [[maybe_unused]] bool found = cmd_getval(cmdmap, "injected_args", argv); + assert(found); + const std::string args = boost::algorithm::join(argv, " "); + return local_conf().inject_args(args).then([] { + return seastar::make_ready_future(); + }).handle_exception_type([] (const std::invalid_argument& e) { + return seastar::make_ready_future( + tell_result_t{-EINVAL, e.what()}); + }); + } +}; + /// the hooks that are served directly by the admin_socket server seastar::future<> AdminSocket::register_admin_commands() { @@ -397,7 +422,8 @@ seastar::future<> AdminSocket::register_admin_commands() register_command(std::make_unique()), register_command(std::make_unique()), register_command(std::make_unique(*this)), - register_command(std::make_unique(*this))); + register_command(std::make_unique(*this)), + register_command(std::make_unique())); } } // namespace crimson::admin