From bc9ab73704f7bc94e3a7fa0105936b340dde7478 Mon Sep 17 00:00:00 2001 From: "Adam C. Emerson" Date: Mon, 29 Jan 2018 23:27:33 -0500 Subject: [PATCH] common/admin_socket: Copy fewer strings Pass std::string_view to call, rather than passing strings by value. Change cmdmap_t and the maps in admin_socket to use the std::less<> transparent comparator, so we can compare string_views to strings. (Or anything else with an equality operator with strings.) Pass the cmdmap_t in to call by const reference, not reference. The change to cmdmap_t requires changing some of the users of cmdmap_t. (That is, make them actually use cmdmap_t explicitly, not the open-coed map type.) Signed-off-by: Adam C. Emerson --- src/client/Client.cc | 5 ++- src/client/Client.h | 4 +- src/common/admin_socket.cc | 62 ++++++++++++++------------- src/common/admin_socket.h | 30 ++++++++----- src/common/ceph_context.cc | 20 ++++----- src/common/ceph_context.h | 4 +- src/common/cmdparse.cc | 2 +- src/common/cmdparse.h | 2 +- src/librbd/LibrbdAdminSocketHook.cc | 6 ++- src/librbd/LibrbdAdminSocketHook.h | 7 +-- src/mds/MDSDaemon.cc | 8 ++-- src/mds/MDSDaemon.h | 4 +- src/mds/MDSRank.cc | 7 +-- src/mds/MDSRank.h | 2 +- src/mgr/DaemonServer.cc | 6 +-- src/mgr/DaemonServer.h | 4 +- src/mon/AuthMonitor.cc | 4 +- src/mon/ConfigKeyService.cc | 2 +- src/mon/FSCommands.cc | 18 ++++---- src/mon/FSCommands.h | 2 +- src/mon/LogMonitor.cc | 4 +- src/mon/MDSMonitor.cc | 16 +++---- src/mon/MDSMonitor.h | 2 +- src/mon/MgrMonitor.cc | 4 +- src/mon/Monitor.cc | 27 ++++++------ src/mon/Monitor.h | 14 +++--- src/mon/MonmapMonitor.cc | 4 +- src/mon/OSDMonitor.cc | 57 ++++++++++++------------ src/mon/OSDMonitor.h | 8 ++-- src/mon/PGMap.cc | 4 +- src/mon/PGMap.h | 2 +- src/osd/OSD.cc | 24 ++++++----- src/osd/OSD.h | 3 +- src/osdc/Objecter.cc | 10 +++-- src/rgw/rgw_coroutine.cc | 6 ++- src/rgw/rgw_coroutine.h | 9 ++-- src/rgw/rgw_rados.cc | 8 ++-- src/rgw/rgw_rados.h | 3 +- src/rgw/rgw_sync_trace.cc | 4 +- src/rgw/rgw_sync_trace.h | 5 ++- src/test/admin_socket.cc | 9 ++-- src/tools/rbd_mirror/ImageDeleter.cc | 7 +-- src/tools/rbd_mirror/ImageReplayer.cc | 7 +-- src/tools/rbd_mirror/Mirror.cc | 6 +-- src/tools/rbd_mirror/PoolReplayer.cc | 7 +-- 45 files changed, 244 insertions(+), 205 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 246428fbdaceb..168f2b7d20090 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -137,8 +137,9 @@ Client::CommandHook::CommandHook(Client *client) : { } -bool Client::CommandHook::call(std::string command, cmdmap_t& cmdmap, - std::string format, bufferlist& out) +bool Client::CommandHook::call(std::string_view command, + const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) { std::unique_ptr f(Formatter::create(format)); f->open_object_section("result"); diff --git a/src/client/Client.h b/src/client/Client.h index 245b2f1358d95..ae5b188538391 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -257,8 +257,8 @@ class Client : public Dispatcher, public md_config_obs_t { Client *m_client; public: explicit CommandHook(Client *client); - bool call(std::string command, cmdmap_t &cmdmap, std::string format, - bufferlist& out) override; + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override; }; CommandHook m_command_hook; diff --git a/src/common/admin_socket.cc b/src/common/admin_socket.cc index 362a9971fcc57..9478736a16b1e 100644 --- a/src/common/admin_socket.cc +++ b/src/common/admin_socket.cc @@ -359,7 +359,7 @@ bool AdminSocket::do_accept() bool rval = false; - map cmdmap; + cmdmap_t cmdmap; string format; vector cmdvec; stringstream errss; @@ -382,7 +382,7 @@ bool AdminSocket::do_accept() p = m_hooks.find(match); if (p != m_hooks.end()) break; - + // drop right-most word size_t pos = match.rfind(' '); if (pos == std::string::npos) { @@ -441,8 +441,8 @@ bool AdminSocket::do_accept() } bool AdminSocket::validate(const std::string& command, - const cmdmap_t& cmdmap, - bufferlist& out) const + const cmdmap_t& cmdmap, + bufferlist& out) const { stringstream os; if (validate_cmd(m_cct, m_descs.at(command), cmdmap, os)) { @@ -453,7 +453,10 @@ bool AdminSocket::validate(const std::string& command, } } -int AdminSocket::register_command(std::string command, std::string cmddesc, AdminSocketHook *hook, std::string help) +int AdminSocket::register_command(std::string_view command, + std::string_view cmddesc, + AdminSocketHook *hook, + std::string_view help) { int ret; m_lock.Lock(); @@ -462,24 +465,24 @@ int AdminSocket::register_command(std::string command, std::string cmddesc, Admi ret = -EEXIST; } else { ldout(m_cct, 5) << "register_command " << command << " hook " << hook << dendl; - m_hooks[command] = hook; - m_descs[command] = cmddesc; - m_help[command] = help; + m_hooks.emplace(command, hook); + m_descs.emplace(command, cmddesc); + m_help.emplace(command, help); ret = 0; - } + } m_lock.Unlock(); return ret; } -int AdminSocket::unregister_command(std::string command) +int AdminSocket::unregister_command(std::string_view command) { int ret; m_lock.Lock(); if (m_hooks.count(command)) { ldout(m_cct, 5) << "unregister_command " << command << dendl; - m_hooks.erase(command); - m_descs.erase(command); - m_help.erase(command); + m_hooks.erase(m_hooks.find(command)); + m_descs.erase(m_descs.find(command)); + m_help.erase(m_help.find(command)); // If we are currently processing a command, wait for it to // complete in case it referenced the hook that we are @@ -499,9 +502,9 @@ int AdminSocket::unregister_command(std::string command) class VersionHook : public AdminSocketHook { public: - bool call(std::string command, cmdmap_t &cmdmap, std::string format, - bufferlist& out) override { - if (command == "0") { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { + if (command == "0"sv) { out.append(CEPH_ADMIN_SOCK_VERSION); } else { JSONFormatter jf; @@ -527,14 +530,14 @@ class HelpHook : public AdminSocketHook { AdminSocket *m_as; public: explicit HelpHook(AdminSocket *as) : m_as(as) {} - bool call(string command, cmdmap_t &cmdmap, string format, bufferlist& out) override { - Formatter *f = Formatter::create(format, "json-pretty", "json-pretty"); + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, + bufferlist& out) override { + auto f = Formatter::create(format, "json-pretty"sv, "json-pretty"sv); f->open_object_section("help"); - for (map::iterator p = m_as->m_help.begin(); - p != m_as->m_help.end(); - ++p) { - if (p->second.length()) - f->dump_string(p->first.c_str(), p->second); + for (const auto& [command, help] : m_as->m_help) { + if (help.length()) + f->dump_string(command.c_str(), help); } f->close_section(); ostringstream ss; @@ -549,19 +552,18 @@ class GetdescsHook : public AdminSocketHook { AdminSocket *m_as; public: explicit GetdescsHook(AdminSocket *as) : m_as(as) {} - bool call(string command, cmdmap_t &cmdmap, string format, bufferlist& out) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { int cmdnum = 0; JSONFormatter jf; jf.open_object_section("command_descriptions"); - for (map::iterator p = m_as->m_descs.begin(); - p != m_as->m_descs.end(); - ++p) { + for (const auto& [command, desc] : m_as->m_descs) { ostringstream secname; secname << "cmd" << setfill('0') << std::setw(3) << cmdnum; dump_cmd_and_help_to_json(&jf, secname.str().c_str(), - p->second.c_str(), - m_as->m_help[p->first]); + desc, + m_as->m_help[command]); cmdnum++; } jf.close_section(); // command_descriptions @@ -573,7 +575,7 @@ public: } }; -bool AdminSocket::init(const std::string &path) +bool AdminSocket::init(const std::string& path) { ldout(m_cct, 5) << "init " << path << dendl; diff --git a/src/common/admin_socket.h b/src/common/admin_socket.h index e3066bf3cdb38..36d96178a0a36 100644 --- a/src/common/admin_socket.h +++ b/src/common/admin_socket.h @@ -15,17 +15,19 @@ #ifndef CEPH_COMMON_ADMIN_SOCKET_H #define CEPH_COMMON_ADMIN_SOCKET_H +#include + #include "common/Cond.h" class AdminSocket; class CephContext; -#define CEPH_ADMIN_SOCK_VERSION "2" +inline constexpr auto CEPH_ADMIN_SOCK_VERSION = "2"sv; class AdminSocketHook { public: - virtual bool call(std::string command, cmdmap_t &cmdmap, std::string format, - bufferlist& out) = 0; + virtual bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) = 0; virtual ~AdminSocketHook() {} }; @@ -35,6 +37,11 @@ public: AdminSocket(CephContext *cct); ~AdminSocket() override; + AdminSocket(const AdminSocket&) = delete; + AdminSocket& operator =(const AdminSocket&) = delete; + AdminSocket(AdminSocket&&) = delete; + AdminSocket& operator =(AdminSocket&&) = delete; + /** * register an admin socket command * @@ -54,7 +61,10 @@ public: * * @return 0 for success, -EEXIST if command already registered. */ - int register_command(std::string command, std::string cmddesc, AdminSocketHook *hook, std::string help); + int register_command(std::string_view command, + std::string_view cmddesc, + AdminSocketHook *hook, + std::string_view help); /** * unregister an admin socket command. @@ -66,16 +76,14 @@ public: * @param command command string * @return 0 on succest, -ENOENT if command dne. */ - int unregister_command(std::string command); + int unregister_command(std::string_view command); - bool init(const std::string &path); + bool init(const string& path); void chown(uid_t uid, gid_t gid); void chmod(mode_t mode); private: - AdminSocket(const AdminSocket& rhs); - AdminSocket& operator=(const AdminSocket &rhs); void shutdown(); @@ -100,9 +108,9 @@ private: Mutex m_lock; // protects m_hooks, m_descs, m_help AdminSocketHook *m_version_hook, *m_help_hook, *m_getdescs_hook; - std::map m_hooks; - std::map m_descs; - std::map m_help; + std::map> m_hooks; + std::map> m_descs; + std::map> m_help; friend class AdminSocketTest; friend class HelpHook; diff --git a/src/common/ceph_context.cc b/src/common/ceph_context.cc index 401dbf53fc055..c3533539eb53f 100644 --- a/src/common/ceph_context.cc +++ b/src/common/ceph_context.cc @@ -105,8 +105,8 @@ public: } // AdminSocketHook - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { if (command == "dump_mempools") { std::unique_ptr f(Formatter::create(format)); f->open_object_section("mempools"); @@ -367,19 +367,19 @@ class CephContextHook : public AdminSocketHook { public: explicit CephContextHook(CephContext *cct) : m_cct(cct) {} - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { m_cct->do_command(command, cmdmap, format, &out); return true; } }; -void CephContext::do_command(std::string command, cmdmap_t& cmdmap, - std::string format, bufferlist *out) +void CephContext::do_command(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist *out) { Formatter *f = Formatter::create(format, "json-pretty", "json-pretty"); stringstream ss; - for (cmdmap_t::iterator it = cmdmap.begin(); it != cmdmap.end(); ++it) { + for (auto it = cmdmap.begin(); it != cmdmap.end(); ++it) { if (it->first != "prefix") { ss << it->first << ":" << cmd_vartype_stringify(it->second) << " "; } @@ -411,7 +411,7 @@ void CephContext::do_command(std::string command, cmdmap_t& cmdmap, } else if (command == "perf reset") { std::string var; - string section = command; + std::string section(command); f->open_object_section(section.c_str()); if (!cmd_getval(this, cmdmap, "var", var)) { f->dump_string("error", "syntax error: 'perf reset '"); @@ -419,12 +419,12 @@ void CephContext::do_command(std::string command, cmdmap_t& cmdmap, if(!_perf_counters_collection->reset(var)) f->dump_stream("error") << "Not find: " << var; else - f->dump_string("success", command + ' ' + var); + f->dump_string("success", std::string(command) + ' ' + var); } f->close_section(); } else { - string section = command; + std::string section(command); boost::replace_all(section, " ", "_"); f->open_object_section(section.c_str()); if (command == "config show") { diff --git a/src/common/ceph_context.h b/src/common/ceph_context.h index 9070cfb72e82e..72d912205695b 100644 --- a/src/common/ceph_context.h +++ b/src/common/ceph_context.h @@ -126,8 +126,8 @@ public: /** * process an admin socket command */ - void do_command(std::string command, cmdmap_t& cmdmap, std::string format, - ceph::bufferlist *out); + void do_command(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, ceph::bufferlist *out); template void lookup_or_create_singleton_object(T*& p, const std::string &name) { diff --git a/src/common/cmdparse.cc b/src/common/cmdparse.cc index 473ad10cde31c..51a9c1abed369 100644 --- a/src/common/cmdparse.cc +++ b/src/common/cmdparse.cc @@ -211,7 +211,7 @@ void cmdmap_dump(const cmdmap_t &cmdmap, Formatter *f) * false, ss is valid */ bool -cmdmap_from_json(vector cmd, map *mapp, stringstream &ss) +cmdmap_from_json(vector cmd, cmdmap_t *mapp, stringstream &ss) { json_spirit::mValue v; diff --git a/src/common/cmdparse.h b/src/common/cmdparse.h index 814430418eb31..808501387baa7 100644 --- a/src/common/cmdparse.h +++ b/src/common/cmdparse.h @@ -23,7 +23,7 @@ typedef boost::variant, std::vector, std::vector> cmd_vartype; -typedef std::map cmdmap_t; +typedef std::map> cmdmap_t; std::string cmddesc_get_prefix(const std::string &cmddesc); void dump_cmd_to_json(ceph::Formatter *f, const std::string& cmd); diff --git a/src/librbd/LibrbdAdminSocketHook.cc b/src/librbd/LibrbdAdminSocketHook.cc index 02c4fb58f296b..0b0c2bf0bf030 100644 --- a/src/librbd/LibrbdAdminSocketHook.cc +++ b/src/librbd/LibrbdAdminSocketHook.cc @@ -88,8 +88,10 @@ LibrbdAdminSocketHook::~LibrbdAdminSocketHook() { } } -bool LibrbdAdminSocketHook::call(std::string command, cmdmap_t& cmdmap, - std::string format, bufferlist& out) { +bool LibrbdAdminSocketHook::call(std::string_view command, + const cmdmap_t& cmdmap, + std::string_view format, + bufferlist& out) { Commands::const_iterator i = commands.find(command); assert(i != commands.end()); stringstream ss; diff --git a/src/librbd/LibrbdAdminSocketHook.h b/src/librbd/LibrbdAdminSocketHook.h index cdc2e3db09aba..8b1b5b9422f63 100644 --- a/src/librbd/LibrbdAdminSocketHook.h +++ b/src/librbd/LibrbdAdminSocketHook.h @@ -17,11 +17,12 @@ namespace librbd { LibrbdAdminSocketHook(ImageCtx *ictx); ~LibrbdAdminSocketHook() override; - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override; + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override; private: - typedef std::map Commands; + typedef std::map> Commands; AdminSocket *admin_socket; Commands commands; diff --git a/src/mds/MDSDaemon.cc b/src/mds/MDSDaemon.cc index 4b3a6a2a34b3f..305d630239910 100644 --- a/src/mds/MDSDaemon.cc +++ b/src/mds/MDSDaemon.cc @@ -117,8 +117,8 @@ class MDSSocketHook : public AdminSocketHook { MDSDaemon *mds; public: explicit MDSSocketHook(MDSDaemon *m) : mds(m) {} - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { stringstream ss; bool r = mds->asok_command(command, cmdmap, format, ss); out.append(ss); @@ -126,8 +126,8 @@ public: } }; -bool MDSDaemon::asok_command(string command, cmdmap_t& cmdmap, string format, - ostream& ss) +bool MDSDaemon::asok_command(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, std::ostream& ss) { dout(1) << "asok_command: " << command << " (starting...)" << dendl; diff --git a/src/mds/MDSDaemon.h b/src/mds/MDSDaemon.h index 29a273afadcda..4ba26d54ee9d5 100644 --- a/src/mds/MDSDaemon.h +++ b/src/mds/MDSDaemon.h @@ -113,8 +113,8 @@ class MDSDaemon : public Dispatcher, public md_config_obs_t { void set_up_admin_socket(); void clean_up_admin_socket(); void check_ops_in_flight(); // send off any slow ops to monitor - bool asok_command(string command, cmdmap_t& cmdmap, string format, - ostream& ss); + bool asok_command(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, ostream& ss); void dump_status(Formatter *f); diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 91d4e31d3410c..6650755e58fed 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -1851,9 +1851,10 @@ void MDSRank::handle_mds_failure(mds_rank_t who) snapclient->handle_mds_failure(who); } -bool MDSRankDispatcher::handle_asok_command( - std::string command, cmdmap_t& cmdmap, Formatter *f, - std::ostream& ss) +bool MDSRankDispatcher::handle_asok_command(std::string_view command, + const cmdmap_t& cmdmap, + Formatter *f, + std::ostream& ss) { if (command == "dump_ops_in_flight" || command == "ops") { diff --git a/src/mds/MDSRank.h b/src/mds/MDSRank.h index 39e09c7b0c0b3..fa64d1d8b7adc 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -541,7 +541,7 @@ public: void init(); void tick(); void shutdown(); - bool handle_asok_command(std::string command, cmdmap_t& cmdmap, + bool handle_asok_command(std::string_view command, const cmdmap_t& cmdmap, Formatter *f, std::ostream& ss); void handle_mds_map(MMDSMap *m, MDSMap *oldmap); void handle_osd_map(); diff --git a/src/mgr/DaemonServer.cc b/src/mgr/DaemonServer.cc index 0be909070abb5..a8ba11db6b8e4 100644 --- a/src/mgr/DaemonServer.cc +++ b/src/mgr/DaemonServer.cc @@ -522,10 +522,10 @@ bool DaemonServer::handle_report(MMgrReport *m) void DaemonServer::_generate_command_map( - map& cmdmap, + cmdmap_t& cmdmap, map ¶m_str_map) { - for (map::const_iterator p = cmdmap.begin(); + for (auto p = cmdmap.begin(); p != cmdmap.end(); ++p) { if (p->first == "prefix") continue; @@ -562,7 +562,7 @@ bool DaemonServer::_allowed_command( MgrSession *s, const string &module, const string &prefix, - const map& cmdmap, + const cmdmap_t& cmdmap, const map& param_str_map, const MonCommand *this_cmd) { diff --git a/src/mgr/DaemonServer.h b/src/mgr/DaemonServer.h index 1dcc24b277868..9c0575461d2bb 100644 --- a/src/mgr/DaemonServer.h +++ b/src/mgr/DaemonServer.h @@ -80,13 +80,13 @@ protected: Mutex lock; - static void _generate_command_map(map& cmdmap, + static void _generate_command_map(cmdmap_t& cmdmap, map ¶m_str_map); static const MonCommand *_get_mgrcommand(const string &cmd_prefix, const std::vector &commands); bool _allowed_command( MgrSession *s, const string &module, const string &prefix, - const map& cmdmap, + const cmdmap_t& cmdmap, const map& param_str_map, const MonCommand *this_cmd); diff --git a/src/mon/AuthMonitor.cc b/src/mon/AuthMonitor.cc index e2d303a0ae16e..72ff9fd272d35 100644 --- a/src/mon/AuthMonitor.cc +++ b/src/mon/AuthMonitor.cc @@ -524,7 +524,7 @@ bool AuthMonitor::preprocess_command(MonOpRequestRef op) bufferlist rdata; stringstream ss, ds; - map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { // ss has reason for failure string rs = ss.str(); @@ -1011,7 +1011,7 @@ bool AuthMonitor::prepare_command(MonOpRequestRef op) string rs; int err = -EINVAL; - map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { // ss has reason for failure string rs = ss.str(); diff --git a/src/mon/ConfigKeyService.cc b/src/mon/ConfigKeyService.cc index cd0587d2e2fef..4318171848044 100644 --- a/src/mon/ConfigKeyService.cc +++ b/src/mon/ConfigKeyService.cc @@ -165,7 +165,7 @@ bool ConfigKeyService::service_dispatch(MonOpRequestRef op) bufferlist rdata; string prefix; - map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(cmd->cmd, &cmdmap, ss)) { return false; diff --git a/src/mon/FSCommands.cc b/src/mon/FSCommands.cc index a33140c99e7bf..0d90f663c8f45 100644 --- a/src/mon/FSCommands.cc +++ b/src/mon/FSCommands.cc @@ -40,7 +40,7 @@ class FlagSetHandler : public FileSystemCommandHandler Monitor *mon, FSMap &fsmap, MonOpRequestRef op, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss) override { string flag_name; @@ -93,7 +93,7 @@ class FsNewHandler : public FileSystemCommandHandler Monitor *mon, FSMap &fsmap, MonOpRequestRef op, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss) override { assert(m_paxos->is_plugged()); @@ -224,7 +224,7 @@ public: Monitor *mon, FSMap &fsmap, MonOpRequestRef op, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss) override { std::string fs_name; @@ -507,7 +507,7 @@ class AddDataPoolHandler : public FileSystemCommandHandler Monitor *mon, FSMap &fsmap, MonOpRequestRef op, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss) override { assert(m_paxos->is_plugged()); @@ -586,7 +586,7 @@ class SetDefaultHandler : public FileSystemCommandHandler Monitor *mon, FSMap &fsmap, MonOpRequestRef op, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss) override { std::string fs_name; @@ -613,7 +613,7 @@ class RemoveFilesystemHandler : public FileSystemCommandHandler Monitor *mon, FSMap &fsmap, MonOpRequestRef op, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss) override { // Check caller has correctly named the FS to delete @@ -677,7 +677,7 @@ class ResetFilesystemHandler : public FileSystemCommandHandler Monitor *mon, FSMap &fsmap, MonOpRequestRef op, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss) override { string fs_name; @@ -722,7 +722,7 @@ class RemoveDataPoolHandler : public FileSystemCommandHandler Monitor *mon, FSMap &fsmap, MonOpRequestRef op, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss) override { string poolname; @@ -803,7 +803,7 @@ class AliasHandler : public T Monitor *mon, FSMap &fsmap, MonOpRequestRef op, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss) override { return T::handle(mon, fsmap, op, cmdmap, ss); diff --git a/src/mon/FSCommands.h b/src/mon/FSCommands.h index b6b029a17d3f0..f7066c49f8635 100644 --- a/src/mon/FSCommands.h +++ b/src/mon/FSCommands.h @@ -80,7 +80,7 @@ public: Monitor *mon, FSMap &fsmap, MonOpRequestRef op, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss) = 0; }; diff --git a/src/mon/LogMonitor.cc b/src/mon/LogMonitor.cc index 0c1065d45ab09..2d785d4d884cb 100644 --- a/src/mon/LogMonitor.cc +++ b/src/mon/LogMonitor.cc @@ -382,7 +382,7 @@ bool LogMonitor::preprocess_command(MonOpRequestRef op) bufferlist rdata; stringstream ss; - map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { string rs = ss.str(); mon->reply_command(op, -EINVAL, rs, get_last_committed()); @@ -479,7 +479,7 @@ bool LogMonitor::prepare_command(MonOpRequestRef op) string rs; int err = -EINVAL; - map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { // ss has reason for failure string rs = ss.str(); diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 028dc6704dda8..c5a91cf4a8c43 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -839,7 +839,7 @@ bool MDSMonitor::preprocess_command(MonOpRequestRef op) bufferlist rdata; stringstream ss, ds; - map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { // ss has reason for failure string rs = ss.str(); @@ -1167,7 +1167,7 @@ bool MDSMonitor::prepare_command(MonOpRequestRef op) stringstream ss; bufferlist rdata; - map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { string rs = ss.str(); mon->reply_command(op, -EINVAL, rs, rdata, get_last_committed()); @@ -1283,7 +1283,7 @@ int MDSMonitor::parse_role( int MDSMonitor::filesystem_command( MonOpRequestRef op, std::string const &prefix, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss) { dout(4) << __func__ << " prefix='" << prefix << "'" << dendl; @@ -1331,13 +1331,13 @@ int MDSMonitor::filesystem_command( mds_gid_t gid; if (!cmd_getval(g_ceph_context, cmdmap, "gid", gid)) { ss << "error parsing 'gid' value '" - << cmd_vartype_stringify(cmdmap["gid"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("gid")) << "'"; return -EINVAL; } MDSMap::DaemonState state; if (!cmd_getval(g_ceph_context, cmdmap, "state", state)) { ss << "error parsing 'state' string value '" - << cmd_vartype_stringify(cmdmap["state"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("state")) << "'"; return -EINVAL; } if (pending_fsmap.gid_exists(gid)) { @@ -1368,7 +1368,7 @@ int MDSMonitor::filesystem_command( mds_gid_t gid; if (!cmd_getval(g_ceph_context, cmdmap, "gid", gid)) { ss << "error parsing 'gid' value '" - << cmd_vartype_stringify(cmdmap["gid"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("gid")) << "'"; return -EINVAL; } if (!pending_fsmap.gid_exists(gid)) { @@ -1417,7 +1417,7 @@ int MDSMonitor::filesystem_command( int64_t f; if (!cmd_getval(g_ceph_context, cmdmap, "feature", f)) { ss << "error parsing feature value '" - << cmd_vartype_stringify(cmdmap["feature"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("feature")) << "'"; return -EINVAL; } if (pending_fsmap.compat.compat.contains(f)) { @@ -1433,7 +1433,7 @@ int MDSMonitor::filesystem_command( int64_t f; if (!cmd_getval(g_ceph_context, cmdmap, "feature", f)) { ss << "error parsing feature value '" - << cmd_vartype_stringify(cmdmap["feature"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("feature")) << "'"; return -EINVAL; } if (pending_fsmap.compat.incompat.contains(f)) { diff --git a/src/mon/MDSMonitor.h b/src/mon/MDSMonitor.h index c59858a092bcb..760bdeebbeb92 100644 --- a/src/mon/MDSMonitor.h +++ b/src/mon/MDSMonitor.h @@ -98,7 +98,7 @@ class MDSMonitor : public PaxosService { int filesystem_command( MonOpRequestRef op, std::string const &prefix, - map &cmdmap, + const cmdmap_t& cmdmap, std::stringstream &ss); // beacons diff --git a/src/mon/MgrMonitor.cc b/src/mon/MgrMonitor.cc index 76985abc04332..50a7b80873ee3 100644 --- a/src/mon/MgrMonitor.cc +++ b/src/mon/MgrMonitor.cc @@ -666,7 +666,7 @@ bool MgrMonitor::preprocess_command(MonOpRequestRef op) std::stringstream ss; bufferlist rdata; - std::map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { string rs = ss.str(); mon->reply_command(op, -EINVAL, rs, rdata, get_last_committed()); @@ -806,7 +806,7 @@ bool MgrMonitor::prepare_command(MonOpRequestRef op) std::stringstream ss; bufferlist rdata; - std::map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { string rs = ss.str(); mon->reply_command(op, -EINVAL, rs, rdata, get_last_committed()); diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index d6341cb0a0cf6..4a93abbe6f6b9 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -226,8 +226,8 @@ class AdminHook : public AdminSocketHook { Monitor *mon; public: explicit AdminHook(Monitor *m) : mon(m) {} - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { stringstream ss; mon->do_admin_command(command, cmdmap, format, ss); out.append(ss); @@ -235,15 +235,15 @@ public: } }; -void Monitor::do_admin_command(string command, cmdmap_t& cmdmap, string format, - ostream& ss) +void Monitor::do_admin_command(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, std::ostream& ss) { Mutex::Locker l(lock); boost::scoped_ptr f(Formatter::create(format)); string args; - for (cmdmap_t::iterator p = cmdmap.begin(); + for (auto p = cmdmap.begin(); p != cmdmap.end(); ++p) { if (p->first == "prefix") continue; @@ -1006,12 +1006,14 @@ void Monitor::bootstrap() } } -bool Monitor::_add_bootstrap_peer_hint(string cmd, cmdmap_t& cmdmap, ostream& ss) +bool Monitor::_add_bootstrap_peer_hint(std::string_view cmd, + const cmdmap_t& cmdmap, + ostream& ss) { string addrstr; if (!cmd_getval(g_ceph_context, cmdmap, "addr", addrstr)) { ss << "unable to parse address string value '" - << cmd_vartype_stringify(cmdmap["addr"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("addr")) << "'"; return false; } dout(10) << "_add_bootstrap_peer_hint '" << cmd << "' '" @@ -2719,11 +2721,10 @@ void Monitor::get_cluster_status(stringstream &ss, Formatter *f) } } -void Monitor::_generate_command_map(map& cmdmap, +void Monitor::_generate_command_map(cmdmap_t& cmdmap, map ¶m_str_map) { - for (map::const_iterator p = cmdmap.begin(); - p != cmdmap.end(); ++p) { + for (auto p = cmdmap.begin(); p != cmdmap.end(); ++p) { if (p->first == "prefix") continue; if (p->first == "caps") { @@ -2753,8 +2754,8 @@ const MonCommand *Monitor::_get_moncommand( return nullptr; } -bool Monitor::_allowed_command(MonSession *s, string &module, string &prefix, - const map& cmdmap, +bool Monitor::_allowed_command(MonSession *s, const string &module, + const string &prefix, const cmdmap_t& cmdmap, const map& param_str_map, const MonCommand *this_cmd) { @@ -2847,7 +2848,7 @@ void Monitor::handle_command(MonOpRequestRef op) string prefix; vector fullcmd; - map cmdmap; + cmdmap_t cmdmap; stringstream ss, ds; bufferlist rdata; string rs; diff --git a/src/mon/Monitor.h b/src/mon/Monitor.h index 4d0ea79637edd..3bf4c3c30ca9b 100644 --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@ -665,18 +665,20 @@ public: void handle_subscribe(MonOpRequestRef op); void handle_mon_get_map(MonOpRequestRef op); - static void _generate_command_map(map& cmdmap, + static void _generate_command_map(cmdmap_t& cmdmap, map ¶m_str_map); static const MonCommand *_get_moncommand( const string &cmd_prefix, const vector& cmds); - bool _allowed_command(MonSession *s, string &module, string &prefix, - const map& cmdmap, + bool _allowed_command(MonSession *s, const string& module, + const string& prefix, + const cmdmap_t& cmdmap, const map& param_str_map, const MonCommand *this_cmd); void get_mon_status(Formatter *f, ostream& ss); void _quorum_status(Formatter *f, ostream& ss); - bool _add_bootstrap_peer_hint(string cmd, cmdmap_t& cmdmap, ostream& ss); + bool _add_bootstrap_peer_hint(std::string_view cmd, const cmdmap_t& cmdmap, + std::ostream& ss); void handle_command(MonOpRequestRef op); void handle_route(MonOpRequestRef op); @@ -944,8 +946,8 @@ public: int write_fsid(); int write_fsid(MonitorDBStore::TransactionRef t); - void do_admin_command(std::string command, cmdmap_t& cmdmap, - std::string format, ostream& ss); + void do_admin_command(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, std::ostream& ss); private: // don't allow copying diff --git a/src/mon/MonmapMonitor.cc b/src/mon/MonmapMonitor.cc index f84c930e5df3d..8997f6d214ad8 100644 --- a/src/mon/MonmapMonitor.cc +++ b/src/mon/MonmapMonitor.cc @@ -230,7 +230,7 @@ bool MonmapMonitor::preprocess_command(MonOpRequestRef op) bufferlist rdata; stringstream ss; - map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { string rs = ss.str(); mon->reply_command(op, -EINVAL, rs, rdata, get_last_committed()); @@ -422,7 +422,7 @@ bool MonmapMonitor::prepare_command(MonOpRequestRef op) string rs; int err = -EINVAL; - map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { string rs = ss.str(); mon->reply_command(op, -EINVAL, rs, get_last_committed()); diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index a74191aabf331..d7056aa6f10ba 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -3603,7 +3603,7 @@ bool OSDMonitor::preprocess_command(MonOpRequestRef op) bufferlist rdata; stringstream ss, ds; - map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { string rs = ss.str(); mon->reply_command(op, -EINVAL, rs, get_last_committed()); @@ -5895,7 +5895,7 @@ bool OSDMonitor::prepare_unset_flag(MonOpRequestRef op, int flag) return true; } -int OSDMonitor::prepare_command_pool_set(map &cmdmap, +int OSDMonitor::prepare_command_pool_set(const cmdmap_t& cmdmap, stringstream& ss) { string poolstr; @@ -6382,7 +6382,7 @@ int OSDMonitor::prepare_command_pool_set(map &cmdmap, } int OSDMonitor::prepare_command_pool_application(const string &prefix, - map &cmdmap, + const cmdmap_t& cmdmap, stringstream& ss) { string pool_name; @@ -6809,7 +6809,7 @@ int OSDMonitor::prepare_command_osd_create( int OSDMonitor::prepare_command_osd_new( MonOpRequestRef op, - const map& cmdmap, + const cmdmap_t& cmdmap, const map& params, stringstream &ss, Formatter *f) @@ -7074,7 +7074,7 @@ bool OSDMonitor::prepare_command(MonOpRequestRef op) op->mark_osdmon_event(__func__); MMonCommand *m = static_cast(op->get_req()); stringstream ss; - map cmdmap; + cmdmap_t cmdmap; if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) { string rs = ss.str(); mon->reply_command(op, -EINVAL, rs, get_last_committed()); @@ -7091,7 +7091,7 @@ bool OSDMonitor::prepare_command(MonOpRequestRef op) } static int parse_reweights(CephContext *cct, - const map &cmdmap, + const cmdmap_t& cmdmap, const OSDMap& osdmap, map* weights) { @@ -7268,7 +7268,7 @@ int OSDMonitor::prepare_command_osd_purge( } bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, - map &cmdmap) + const cmdmap_t& cmdmap) { op->mark_osdmon_event(__func__); MMonCommand *m = static_cast(op->get_req()); @@ -7846,7 +7846,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, double weight; if (!cmd_getval(cct, cmdmap, "weight", weight)) { ss << "unable to parse weight value '" - << cmd_vartype_stringify(cmdmap["weight"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("weight")) << "'"; err = -EINVAL; goto reply; } @@ -7915,7 +7915,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, double weight; if (!cmd_getval(cct, cmdmap, "weight", weight)) { ss << "unable to parse weight value '" - << cmd_vartype_stringify(cmdmap["weight"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("weight")) << "'"; err = -EINVAL; goto reply; } @@ -8191,7 +8191,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, double w; if (!cmd_getval(cct, cmdmap, "weight", w)) { ss << "unable to parse weight value '" - << cmd_vartype_stringify(cmdmap["weight"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("weight")) << "'"; err = -EINVAL; goto reply; } @@ -8229,7 +8229,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, double w; if (!cmd_getval(cct, cmdmap, "weight", w)) { ss << "unable to parse weight value '" - << cmd_vartype_stringify(cmdmap["weight"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("weight")) << "'"; err = -EINVAL; goto reply; } @@ -8295,7 +8295,8 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, int64_t value = -1; if (!cmd_getval(cct, cmdmap, "value", value)) { err = -EINVAL; - ss << "failed to parse integer value " << cmd_vartype_stringify(cmdmap["value"]); + ss << "failed to parse integer value " + << cmd_vartype_stringify(cmdmap.at("value")); goto reply; } @@ -8648,7 +8649,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, int64_t newmax; if (!cmd_getval(cct, cmdmap, "newmax", newmax)) { ss << "unable to parse 'newmax' value '" - << cmd_vartype_stringify(cmdmap["newmax"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("newmax")) << "'"; err = -EINVAL; goto reply; } @@ -8690,7 +8691,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, double n; if (!cmd_getval(cct, cmdmap, "ratio", n)) { ss << "unable to parse 'ratio' value '" - << cmd_vartype_stringify(cmdmap["ratio"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("ratio")) << "'"; err = -EINVAL; goto reply; } @@ -9393,7 +9394,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, string pgidstr; if (!cmd_getval(cct, cmdmap, "pgid", pgidstr)) { ss << "unable to parse 'pgid' value '" - << cmd_vartype_stringify(cmdmap["pgid"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("pgid")) << "'"; err = -EINVAL; goto reply; } @@ -9455,7 +9456,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, string pgidstr; if (!cmd_getval(cct, cmdmap, "pgid", pgidstr)) { ss << "unable to parse 'pgid' value '" - << cmd_vartype_stringify(cmdmap["pgid"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("pgid")) << "'"; err = -EINVAL; goto reply; } @@ -9474,7 +9475,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, int64_t osd; if (!cmd_getval(cct, cmdmap, "id", osd)) { ss << "unable to parse 'id' value '" - << cmd_vartype_stringify(cmdmap["id"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("id")) << "'"; err = -EINVAL; goto reply; } @@ -9517,7 +9518,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, string pgidstr; if (!cmd_getval(cct, cmdmap, "pgid", pgidstr)) { ss << "unable to parse 'pgid' value '" - << cmd_vartype_stringify(cmdmap["pgid"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("pgid")) << "'"; err = -EINVAL; goto reply; } @@ -9584,7 +9585,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, vector id_vec; if (!cmd_getval(cct, cmdmap, "id", id_vec)) { ss << "unable to parse 'id' value(s) '" - << cmd_vartype_stringify(cmdmap["id"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("id")) << "'"; err = -EINVAL; goto reply; } @@ -9644,7 +9645,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, vector id_vec; if (!cmd_getval(cct, cmdmap, "id", id_vec)) { ss << "unable to parse 'id' value(s) '" - << cmd_vartype_stringify(cmdmap["id"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("id")) << "'"; err = -EINVAL; goto reply; } @@ -9726,14 +9727,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, int64_t id; if (!cmd_getval(cct, cmdmap, "id", id)) { ss << "invalid osd id value '" - << cmd_vartype_stringify(cmdmap["id"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("id")) << "'"; err = -EINVAL; goto reply; } double w; if (!cmd_getval(cct, cmdmap, "weight", w)) { ss << "unable to parse 'weight' value '" - << cmd_vartype_stringify(cmdmap["weight"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("weight")) << "'"; err = -EINVAL; goto reply; } @@ -9767,14 +9768,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, int64_t id; if (!cmd_getval(cct, cmdmap, "id", id)) { ss << "unable to parse osd id value '" - << cmd_vartype_stringify(cmdmap["id"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("id")) << "'"; err = -EINVAL; goto reply; } double w; if (!cmd_getval(cct, cmdmap, "weight", w)) { ss << "unable to parse weight value '" - << cmd_vartype_stringify(cmdmap["weight"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("weight")) << "'"; err = -EINVAL; goto reply; } @@ -9801,7 +9802,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, err = parse_reweights(cct, cmdmap, osdmap, &weights); if (err) { ss << "unable to parse 'weights' value '" - << cmd_vartype_stringify(cmdmap["weights"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("weights")) << "'"; goto reply; } pending_inc.new_weight.insert(weights.begin(), weights.end()); @@ -9813,7 +9814,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, int64_t id; if (!cmd_getval(cct, cmdmap, "id", id)) { ss << "unable to parse osd id value '" - << cmd_vartype_stringify(cmdmap["id"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("id")) << "'"; err = -EINVAL; goto reply; } @@ -9865,7 +9866,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, int64_t id; if (!cmd_getval(cct, cmdmap, "id", id)) { ss << "unable to parse osd id value '" - << cmd_vartype_stringify(cmdmap["id"]) << ""; + << cmd_vartype_stringify(cmdmap.at("id")) << ""; err = -EINVAL; goto reply; } @@ -10842,7 +10843,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, int64_t size = 0; if (!cmd_getval(cct, cmdmap, "size", size)) { ss << "unable to parse 'size' value '" - << cmd_vartype_stringify(cmdmap["size"]) << "'"; + << cmd_vartype_stringify(cmdmap.at("size")) << "'"; err = -EINVAL; goto reply; } diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 4b7ea27d850b6..4b52cf5401061 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -484,7 +484,7 @@ public: bool preprocess_command(MonOpRequestRef op); bool prepare_command(MonOpRequestRef op); - bool prepare_command_impl(MonOpRequestRef op, map& cmdmap); + bool prepare_command_impl(MonOpRequestRef op, const cmdmap_t& cmdmap); int validate_osd_create( const int32_t id, @@ -518,15 +518,15 @@ public: int prepare_command_osd_remove(int32_t id); int prepare_command_osd_new( MonOpRequestRef op, - const map& cmdmap, + const cmdmap_t& cmdmap, const map& secrets, stringstream &ss, Formatter *f); - int prepare_command_pool_set(map &cmdmap, + int prepare_command_pool_set(const cmdmap_t& cmdmap, stringstream& ss); int prepare_command_pool_application(const string &prefix, - map &cmdmap, + const cmdmap_t& cmdmap, stringstream& ss); bool handle_osd_timeouts(const utime_t &now, diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index 0876abede7bcf..c23a130df7d00 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -2925,7 +2925,7 @@ void PGMap::get_health_checks( int process_pg_map_command( const string& orig_prefix, - const map& orig_cmdmap, + const cmdmap_t& orig_cmdmap, const PGMap& pg_map, const OSDMap& osdmap, Formatter *f, @@ -2933,7 +2933,7 @@ int process_pg_map_command( bufferlist *odata) { string prefix = orig_prefix; - map cmdmap = orig_cmdmap; + auto cmdmap = orig_cmdmap; // perhaps these would be better in the parsing, but it's weird bool primary = false; diff --git a/src/mon/PGMap.h b/src/mon/PGMap.h index 6f362d99263a3..f97444ca06933 100644 --- a/src/mon/PGMap.h +++ b/src/mon/PGMap.h @@ -453,7 +453,7 @@ inline ostream& operator<<(ostream& out, const PGMapDigest& m) { int process_pg_map_command( const string& prefix, - const map& cmdmap, + const cmdmap_t& cmdmap, const PGMap& pg_map, const OSDMap& osdmap, Formatter *f, diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index a6a45b16824d6..ef62173630cc8 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1815,7 +1815,7 @@ void OSDService::_queue_for_recovery( namespace ceph { namespace osd_cmds { -int heap(CephContext& cct, cmdmap_t& cmdmap, Formatter& f, std::ostream& os); +int heap(CephContext& cct, const cmdmap_t& cmdmap, Formatter& f, std::ostream& os); }} // namespace ceph::osd_cmds @@ -2149,8 +2149,8 @@ class OSDSocketHook : public AdminSocketHook { OSD *osd; public: explicit OSDSocketHook(OSD *o) : osd(o) {} - bool call(std::string admin_command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override { + bool call(std::string_view admin_command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { stringstream ss; bool r = osd->asok_command(admin_command, cmdmap, format, ss); out.append(ss); @@ -2166,8 +2166,8 @@ std::set OSD::get_mapped_pools() { return pools; } -bool OSD::asok_command(string admin_command, cmdmap_t& cmdmap, string format, - ostream& ss) +bool OSD::asok_command(std::string_view admin_command, const cmdmap_t& cmdmap, + std::string_view format, ostream& ss) { Formatter *f = Formatter::create(format, "json-pretty", "json-pretty"); if (admin_command == "status") { @@ -2404,15 +2404,15 @@ class TestOpsSocketHook : public AdminSocketHook { ObjectStore *store; public: TestOpsSocketHook(OSDService *s, ObjectStore *st) : service(s), store(st) {} - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { stringstream ss; test_ops(service, store, command, cmdmap, ss); out.append(ss); return true; } void test_ops(OSDService *service, ObjectStore *store, - const std::string &command, cmdmap_t& cmdmap, ostream &ss); + std::string_view command, const cmdmap_t& cmdmap, ostream &ss); }; @@ -5035,7 +5035,8 @@ void OSD::tick_without_osd_lock() // // set_recovery_delay [utime] void TestOpsSocketHook::test_ops(OSDService *service, ObjectStore *store, - const std::string &command, cmdmap_t& cmdmap, ostream &ss) + std::string_view command, + const cmdmap_t& cmdmap, ostream &ss) { //Test support //Support changing the omap on a single osd by using the Admin Socket to @@ -5900,7 +5901,7 @@ void OSD::do_command(Connection *con, ceph_tid_t tid, vector& cmd, buffe dout(20) << "do_command tid " << tid << " " << cmd << dendl; - map cmdmap; + cmdmap_t cmdmap; string prefix; string format; string pgidstr; @@ -9929,7 +9930,8 @@ void OSD::ShardedOpWQ::_enqueue_front(OpQueueItem&& item) namespace ceph { namespace osd_cmds { -int heap(CephContext& cct, cmdmap_t& cmdmap, Formatter& f, std::ostream& os) +int heap(CephContext& cct, const cmdmap_t& cmdmap, Formatter& f, + std::ostream& os) { if (!ceph_using_tcmalloc()) { os << "could not issue heap profiler command -- not using tcmalloc!"; diff --git a/src/osd/OSD.h b/src/osd/OSD.h index c6a876ebc1c57..ffe1a9e0039dc 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1162,7 +1162,8 @@ protected: // asok friend class OSDSocketHook; class OSDSocketHook *asok_hook; - bool asok_command(string admin_command, cmdmap_t& cmdmap, string format, ostream& ss); + bool asok_command(std::string_view admin_command, const cmdmap_t& cmdmap, + std::string_view format, std::ostream& ss); public: ClassHandler *class_handler = nullptr; diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 46e38ca676edd..6d1dea3ab118f 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -159,8 +159,8 @@ class Objecter::RequestStateHook : public AdminSocketHook { Objecter *m_objecter; public: explicit RequestStateHook(Objecter *objecter); - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override; + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override; }; /** @@ -4717,8 +4717,10 @@ Objecter::RequestStateHook::RequestStateHook(Objecter *objecter) : { } -bool Objecter::RequestStateHook::call(std::string command, cmdmap_t& cmdmap, - std::string format, bufferlist& out) +bool Objecter::RequestStateHook::call(std::string_view command, + const cmdmap_t& cmdmap, + std::string_view format, + bufferlist& out) { Formatter *f = Formatter::create(format, "json-pretty", "json-pretty"); shared_lock rl(m_objecter->rwlock); diff --git a/src/rgw/rgw_coroutine.cc b/src/rgw/rgw_coroutine.cc index e7d51823be276..0a8b4c270a1b1 100644 --- a/src/rgw/rgw_coroutine.cc +++ b/src/rgw/rgw_coroutine.cc @@ -711,8 +711,10 @@ int RGWCoroutinesManagerRegistry::hook_to_admin_command(const string& command) return 0; } -bool RGWCoroutinesManagerRegistry::call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) { +bool RGWCoroutinesManagerRegistry::call(std::string_view command, + const cmdmap_t& cmdmap, + std::string_view format, + bufferlist& out) { RWLock::RLocker rl(lock); stringstream ss; JSONFormatter f; diff --git a/src/rgw/rgw_coroutine.h b/src/rgw/rgw_coroutine.h index f842328756162..9ccba4b15c361 100644 --- a/src/rgw/rgw_coroutine.h +++ b/src/rgw/rgw_coroutine.h @@ -1,3 +1,6 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + #ifndef CEPH_RGW_COROUTINE_H #define CEPH_RGW_COROUTINE_H @@ -500,9 +503,9 @@ public: void remove(RGWCoroutinesManager *mgr); int hook_to_admin_command(const string& command); - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override; - + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override; + void dump(Formatter *f) const; }; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 9061426b43176..64a784d8eaf2a 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -14046,8 +14046,8 @@ int rgw_compression_info_from_attrset(map& attrs, bool& need } } -bool RGWRados::call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) +bool RGWRados::call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) { if (command == "cache list"sv) { std::optional filter; @@ -14068,7 +14068,7 @@ bool RGWRados::call(std::string command, cmdmap_t& cmdmap, std::string format, } else if (command == "cache inspect"sv) { std::unique_ptr f(ceph::Formatter::create(format, "json-pretty")); if (f) { - const auto& target = boost::get(cmdmap["target"]); + const auto& target = boost::get(cmdmap.at("target")); if (call_inspect(target, f.get())) { f->flush(out); return true; @@ -14081,7 +14081,7 @@ bool RGWRados::call(std::string command, cmdmap_t& cmdmap, std::string format, return false; } } else if (command == "cache erase"sv) { - const auto& target = boost::get(cmdmap["target"]); + const auto& target = boost::get(cmdmap.at("target")); if (call_erase(target)) { return true; } else { diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index c77639381285f..0352cceb31ca8 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -3449,7 +3449,8 @@ private: boost::optional refresh_version); public: - bool call(std::string command, cmdmap_t& cmdmap, std::string format, + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override final; protected: diff --git a/src/rgw/rgw_sync_trace.cc b/src/rgw/rgw_sync_trace.cc index edfbd916c5dfe..3477f072f1c58 100644 --- a/src/rgw/rgw_sync_trace.cc +++ b/src/rgw/rgw_sync_trace.cc @@ -193,8 +193,8 @@ string RGWSyncTraceManager::get_active_names() return ss.str(); } -bool RGWSyncTraceManager::call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) { +bool RGWSyncTraceManager::call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) { bool show_history = (command == "sync trace history"); bool show_short = (command == "sync trace active_short"); diff --git a/src/rgw/rgw_sync_trace.h b/src/rgw/rgw_sync_trace.h index b1cd5e6b2e234..8fe9a8a6f837f 100644 --- a/src/rgw/rgw_sync_trace.h +++ b/src/rgw/rgw_sync_trace.h @@ -1,3 +1,5 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab #ifndef CEPH_RGW_SYNC_LOG_H #define CEPH_RGW_SYNC_LOG_H @@ -129,7 +131,8 @@ public: void finish_node(RGWSyncTraceNode *node); int hook_to_admin_command(); - bool call(std::string command, cmdmap_t& cmdmap, std::string format, bufferlist& out); + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override; string get_active_names(); }; diff --git a/src/test/admin_socket.cc b/src/test/admin_socket.cc index 096893e09466c..9fd9ac4012c5a 100644 --- a/src/test/admin_socket.cc +++ b/src/test/admin_socket.cc @@ -115,7 +115,8 @@ TEST(AdminSocket, SendTooLongRequest) { } class MyTest : public AdminSocketHook { - bool call(std::string command, cmdmap_t& cmdmap, std::string format, bufferlist& result) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& result) override { std::vector args; cmd_getval(g_ceph_context, cmdmap, "args", args); result.append(command); @@ -147,7 +148,8 @@ TEST(AdminSocket, RegisterCommand) { } class MyTest2 : public AdminSocketHook { - bool call(std::string command, cmdmap_t& cmdmap, std::string format, bufferlist& result) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& result) override { std::vector args; cmd_getval(g_ceph_context, cmdmap, "args", args); result.append(command); @@ -200,7 +202,8 @@ public: BlockingHook() : _lock("BlockingHook::_lock") {} - bool call(std::string command, cmdmap_t& cmdmap, std::string format, bufferlist& result) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& result) override { Mutex::Locker l(_lock); _cond.Wait(_lock); return true; diff --git a/src/tools/rbd_mirror/ImageDeleter.cc b/src/tools/rbd_mirror/ImageDeleter.cc index 0e799b704f161..c14965abe40fa 100644 --- a/src/tools/rbd_mirror/ImageDeleter.cc +++ b/src/tools/rbd_mirror/ImageDeleter.cc @@ -103,8 +103,8 @@ public: } } - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { Commands::const_iterator i = commands.find(command); assert(i != commands.end()); Formatter *f = Formatter::create(format); @@ -116,7 +116,8 @@ public: } private: - typedef std::map Commands; + typedef std::map> Commands; AdminSocket *admin_socket; Commands commands; }; diff --git a/src/tools/rbd_mirror/ImageReplayer.cc b/src/tools/rbd_mirror/ImageReplayer.cc index 8535bbacff69b..c46f15ffdd9ca 100644 --- a/src/tools/rbd_mirror/ImageReplayer.cc +++ b/src/tools/rbd_mirror/ImageReplayer.cc @@ -200,8 +200,8 @@ public: commands.clear(); } - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { auto i = commands.find(command); assert(i != commands.end()); Formatter *f = Formatter::create(format); @@ -213,7 +213,8 @@ public: } private: - typedef std::map *> Commands; + typedef std::map*, + std::less<>> Commands; AdminSocket *admin_socket; Commands commands; diff --git a/src/tools/rbd_mirror/Mirror.cc b/src/tools/rbd_mirror/Mirror.cc index f3bc77b095078..a38d1c03d0cac 100644 --- a/src/tools/rbd_mirror/Mirror.cc +++ b/src/tools/rbd_mirror/Mirror.cc @@ -178,8 +178,8 @@ public: } } - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { Commands::const_iterator i = commands.find(command); assert(i != commands.end()); Formatter *f = Formatter::create(format); @@ -191,7 +191,7 @@ public: } private: - typedef std::map Commands; + typedef std::map> Commands; AdminSocket *admin_socket; Commands commands; diff --git a/src/tools/rbd_mirror/PoolReplayer.cc b/src/tools/rbd_mirror/PoolReplayer.cc index 93054d5b73c47..b90f1642e3184 100644 --- a/src/tools/rbd_mirror/PoolReplayer.cc +++ b/src/tools/rbd_mirror/PoolReplayer.cc @@ -192,8 +192,8 @@ public: } } - bool call(std::string command, cmdmap_t& cmdmap, std::string format, - bufferlist& out) override { + bool call(std::string_view command, const cmdmap_t& cmdmap, + std::string_view format, bufferlist& out) override { Commands::const_iterator i = commands.find(command); assert(i != commands.end()); Formatter *f = Formatter::create(format); @@ -205,7 +205,8 @@ public: } private: - typedef std::map Commands; + typedef std::map> Commands; AdminSocket *admin_socket; Commands commands; -- 2.39.5