From 17d6a993fc17d533460c5f40f3908c708e057c18 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 23 May 2024 18:45:17 +0200 Subject: Merging upstream version 18.2.3. Signed-off-by: Daniel Baumann --- src/mgr/DaemonServer.cc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/mgr/DaemonServer.cc') diff --git a/src/mgr/DaemonServer.cc b/src/mgr/DaemonServer.cc index 0e9e6be2a..5b2457278 100644 --- a/src/mgr/DaemonServer.cc +++ b/src/mgr/DaemonServer.cc @@ -1981,6 +1981,37 @@ bool DaemonServer::_handle_command( cmdctx->reply(-EINVAL, ss); return true; } + /* + * RGW has the daemon name stored in the daemon metadata + * and uses the GID as key in the service_map. + * We need to match the user's query with the daemon name to + * find the correct key for retrieving daemon state. + */ + string daemon_name = key.name; + auto p = daemon_name.find("rgw"); + if (p != daemon_name.npos) { + auto rgw_daemons = daemon_state.get_by_service("rgw"); + for (auto& rgw_daemon : rgw_daemons) { + DaemonStatePtr daemon = rgw_daemon.second; + string name = daemon->metadata.find("id")->second; + /* + * The id stored in the metadata is the port number + * for the RGW daemon. + * In the case of multiple RGW daemons, the user might + * use the port number (rgw.8000) to specify the daemon. + */ + auto p = daemon_name.find('.'); + if (p == key.name.npos) { + key = daemon->key; + } else { + // if user has specified port number in the query + if (daemon_name.substr(p + 1) == name) { + key = daemon->key; + break; + } + } + } + } DaemonStatePtr daemon = daemon_state.get(key); if (!daemon) { ss << "no config state for daemon " << who; -- cgit v1.2.3