From: Kefu Chai Date: Wed, 18 Sep 2019 03:59:18 +0000 (+0800) Subject: mgr: set hostname in DeviceState::set_metadata() X-Git-Tag: v15.1.0~1474^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ff6b3997caa43d3eac0fc462f3be9ec4fa5ae6ed;p=ceph.git 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 --- diff --git a/src/mgr/DaemonServer.cc b/src/mgr/DaemonServer.cc index ba6c7f8c4a86..683842745a40 100644 --- a/src/mgr/DaemonServer.cc +++ b/src/mgr/DaemonServer.cc @@ -417,9 +417,6 @@ bool DaemonServer::handle_open(const ref_t& 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) { @@ -2745,9 +2742,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 8c5a8021eaf5..356dcc6b1114 100644 --- a/src/mgr/DaemonState.h +++ b/src/mgr/DaemonState.h @@ -181,6 +181,10 @@ class DaemonState } } } + p = m.find("hostname"); + if (p != m.end()) { + hostname = p->second; + } } const std::map& _get_config_defaults() {