]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: refactor OSD::session_handle_reset() 7054/head
authorsongbaisen <song.baisen@zte.com.cn>
Fri, 25 Dec 2015 06:49:37 +0000 (14:49 +0800)
committersongbaisen <song.baisen@zte.com.cn>
Wed, 6 Jan 2016 01:16:48 +0000 (09:16 +0800)
improve the performance of this method by pulling two loops into one

Fixes: #14182
Signed-off-by: songbaisen <song.baisen@zte.com.cn>
src/osd/OSD.h

index 367d236c059b4c47cd50b2a8b36f7657385d3e64..834bf09782a30a2f950afe1513137c919cda832c 100644 (file)
@@ -1391,7 +1391,7 @@ public:
       (*i)->put();
     }
   }
-  void clear_session_waiting_on_pg(Session *session, spg_t pgid) {
+  void clear_session_waiting_on_pg(Session *session, const spg_t &pgid) {
     Mutex::Locker l(session_waiting_lock);
     map<spg_t, set<Session*> >::iterator i = session_waiting_for_pg.find(pgid);
     if (i == session_waiting_for_pg.end()) {
@@ -1409,19 +1409,14 @@ public:
   void session_handle_reset(Session *session) {
     Mutex::Locker l(session->session_dispatch_lock);
     clear_session_waiting_on_map(session);
-    vector<spg_t> pgs_to_clear;
-    pgs_to_clear.reserve(session->waiting_for_pg.size());
+
     for (map<spg_t, list<OpRequestRef> >::iterator i =
           session->waiting_for_pg.begin();
         i != session->waiting_for_pg.end();
         ++i) {
-      pgs_to_clear.push_back(i->first);
-    }
-    for (vector<spg_t>::iterator i = pgs_to_clear.begin();
-        i != pgs_to_clear.end();
-        ++i) {
-      clear_session_waiting_on_pg(session, *i);
-    }
+      clear_session_waiting_on_pg(session, i->first);
+    }    
+
     /* Messages have connection refs, we need to clear the
      * connection->session->message->connection
      * cycles which result.