summaryrefslogtreecommitdiffstats
path: root/src/mgr
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-23 16:45:17 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-23 16:45:44 +0000
commit17d6a993fc17d533460c5f40f3908c708e057c18 (patch)
tree1a3bd93e0ecd74fa02f93a528fe2f87e5314c4b5 /src/mgr
parentReleasing progress-linux version 18.2.2-0progress7.99u1. (diff)
downloadceph-17d6a993fc17d533460c5f40f3908c708e057c18.tar.xz
ceph-17d6a993fc17d533460c5f40f3908c708e057c18.zip
Merging upstream version 18.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--src/mgr/DaemonServer.cc31
-rw-r--r--src/mgr/MgrClient.h1
2 files changed, 32 insertions, 0 deletions
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;
diff --git a/src/mgr/MgrClient.h b/src/mgr/MgrClient.h
index a48ae163e..1f9bb397f 100644
--- a/src/mgr/MgrClient.h
+++ b/src/mgr/MgrClient.h
@@ -54,6 +54,7 @@ class MgrCommand : public CommandOp
bool tell = false;
explicit MgrCommand(ceph_tid_t t) : CommandOp(t) {}
+ explicit MgrCommand(ceph_tid_t t, ceph_tid_t multi_id) : CommandOp(t, multi_id) {}
MgrCommand() : CommandOp() {}
};