From 60757c5f0919402ee87b218ff5f1f84c29052913 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Wed, 18 Sep 2019 11:59:18 +0800 Subject: [PATCH] mgr: set hostname in DeviceState::set_metadata() before this change, we don't update daemon's host if the daemon already exists in the `daemon_state` registry when handling MMgrOpen even if the hostname is updated and different from the existing one. and we set daemon's metadata and update daemon's hostname when handling MMgrOpen or MServiceMap. after this change, daemon's hostname is always set whenever `DaemonState::set_metadata()` is called. Fixes: https://tracker.ceph.com/issues/40871 Signed-off-by: Kefu Chai (cherry picked from commit ff6b3997caa43d3eac0fc462f3be9ec4fa5ae6ed) --- src/mgr/DaemonServer.cc | 6 ------ src/mgr/DaemonState.h | 4 ++++ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/mgr/DaemonServer.cc b/src/mgr/DaemonServer.cc index acf4443a65524..9acfdf28e2e74 100644 --- a/src/mgr/DaemonServer.cc +++ b/src/mgr/DaemonServer.cc @@ -431,9 +431,6 @@ bool DaemonServer::handle_open(MMgrOpen *m) daemon = std::make_shared(daemon_state.types); daemon->key = key; daemon->service_daemon = true; - if (m->daemon_metadata.count("hostname")) { - daemon->hostname = m->daemon_metadata["hostname"]; - } daemon_state.insert(daemon); } if (daemon) { @@ -2705,9 +2702,6 @@ void DaemonServer::got_service_map() auto daemon = std::make_shared(daemon_state.types); daemon->key = key; daemon->set_metadata(q.second.metadata); - if (q.second.metadata.count("hostname")) { - daemon->hostname = q.second.metadata["hostname"]; - } daemon->service_daemon = true; daemon_state.insert(daemon); dout(10) << "added missing " << key << dendl; diff --git a/src/mgr/DaemonState.h b/src/mgr/DaemonState.h index 680d4a0cc2cf5..706286a2b12f8 100644 --- a/src/mgr/DaemonState.h +++ b/src/mgr/DaemonState.h @@ -180,6 +180,10 @@ class DaemonState } } } + p = m.find("hostname"); + if (p != m.end()) { + hostname = p->second; + } } const std::map& _get_config_defaults() { -- 2.39.5