]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: do not copy session map accidentally
authorPatrick Donnelly <pdonnell@redhat.com>
Tue, 18 Dec 2018 15:00:00 +0000 (07:00 -0800)
committerPatrick Donnelly <pdonnell@redhat.com>
Tue, 18 Dec 2018 21:22:11 +0000 (13:22 -0800)
This is a performance refactor.

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/mds/MDSRank.cc
src/mds/Server.cc
src/mds/SessionMap.h

index 33cf9e60b44a6e8b0045284cb88784122ba37f63..f9bbbb649f0ae07b0f4578b1b91030162209524a 100644 (file)
@@ -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<inodeno_t> 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<Session*> 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<Session*> victims;
-  const auto sessions = sessionmap.get_sessions();
-  for (const auto p : sessions)  {
+  std::vector<Session*> victims;
+  const auto& sessions = sessionmap.get_sessions();
+  for (const auto& p : sessions)  {
     if (!p.first.is_client()) {
       continue;
     }
index b0d2a18c3080cb4828075d61a8e3fac03ae758e7..c01e6cbe5ee0769388309bac93744cfb29871aa7 100644 (file)
@@ -1076,8 +1076,8 @@ void Server::kill_session(Session *session, Context *on_safe)
 size_t Server::apply_blacklist(const std::set<entity_addr_t> &blacklist)
 {
   std::list<Session*> 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.
index 8e9bebea4421eec5637736677db3f4ff21f45dc4..07f02c14ba41a4149bfbaff63629b96d48318ef1 100644 (file)
@@ -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<entity_name_t, Session*> &get_sessions() const
+  const ceph::unordered_map<entity_name_t, Session*>get_sessions() const
   {
     return session_map;
   }