From: Patrick Donnelly Date: Tue, 18 Dec 2018 15:00:00 +0000 (-0800) Subject: mds: do not copy session map accidentally X-Git-Tag: v14.1.0~550^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0a6d79d905426b0ce7792a71245af8f50e712555;p=ceph.git mds: do not copy session map accidentally This is a performance refactor. Signed-off-by: Patrick Donnelly --- diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 33cf9e60b44a..f9bbbb649f0a 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -1566,8 +1566,7 @@ void MDSRank::validate_sessions() // Identify any sessions which have state inconsistent with other, // after they have been loaded from rados during startup. // Mitigate bugs like: http://tracker.ceph.com/issues/16842 - const auto &sessions = sessionmap.get_sessions(); - for (const auto &i : sessions) { + for (const auto &i : sessionmap.get_sessions()) { Session *session = i.second; interval_set badones; if (inotable->intersects_free(session->info.prealloc_inos, &badones)) { @@ -2017,8 +2016,8 @@ void MDSRank::stopping_start() if (mdsmap->get_num_in_mds() == 1 && !sessionmap.empty()) { std::vector victims; - const auto sessions = sessionmap.get_sessions(); - for (const auto p : sessions) { + const auto& sessions = sessionmap.get_sessions(); + for (const auto& p : sessions) { if (!p.first.is_client()) { continue; } @@ -2583,9 +2582,9 @@ void MDSRankDispatcher::evict_clients(const SessionFilter &filter, const MComman return; } - std::list victims; - const auto sessions = sessionmap.get_sessions(); - for (const auto p : sessions) { + std::vector victims; + const auto& sessions = sessionmap.get_sessions(); + for (const auto& p : sessions) { if (!p.first.is_client()) { continue; } diff --git a/src/mds/Server.cc b/src/mds/Server.cc index b0d2a18c3080..c01e6cbe5ee0 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -1076,8 +1076,8 @@ void Server::kill_session(Session *session, Context *on_safe) size_t Server::apply_blacklist(const std::set &blacklist) { std::list victims; - const auto sessions = mds->sessionmap.get_sessions(); - for (const auto p : sessions) { + const auto& sessions = mds->sessionmap.get_sessions(); + for (const auto& p : sessions) { if (!p.first.is_client()) { // Do not apply OSDMap blacklist to MDS daemons, we find out // about their death via MDSMap. diff --git a/src/mds/SessionMap.h b/src/mds/SessionMap.h index 8e9bebea4421..07f02c14ba41 100644 --- a/src/mds/SessionMap.h +++ b/src/mds/SessionMap.h @@ -563,7 +563,7 @@ public: // sessions void decode_legacy(bufferlist::const_iterator& blp) override; bool empty() const { return session_map.empty(); } - const ceph::unordered_map &get_sessions() const + const ceph::unordered_map& get_sessions() const { return session_map; }