]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: properly dirty sessions opened by journal replay 21323/head
authorYan, Zheng <zyan@redhat.com>
Tue, 10 Apr 2018 09:14:02 +0000 (17:14 +0800)
committerYan, Zheng <zyan@redhat.com>
Tue, 10 Apr 2018 09:23:20 +0000 (17:23 +0800)
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Fixes: http://tracker.ceph.com/issues/23625
src/mds/SessionMap.h
src/mds/journal.cc

index 2480a74b7de236c0f993a9faa434b896e4246cb9..49b4ef74d454415e0c20401ec1236429eedc3f73 100644 (file)
@@ -557,13 +557,13 @@ public:
        s.insert(p->second);
   }
 
-  void open_sessions(map<client_t,entity_inst_t>& client_map) {
+  void replay_open_sessions(map<client_t,entity_inst_t>& client_map) {
     for (map<client_t,entity_inst_t>::iterator p = client_map.begin(); 
         p != client_map.end(); 
         ++p) {
       Session *s = get_or_add_session(p->second);
       set_state(s, Session::STATE_OPEN);
-      version++;
+      replay_dirty_session(s);
     }
   }
 
index 37128db419316586e09bb13584484734878ce4e3..e0ed5d5e1df5195cd9d353b1348f6c66e82cea03 100644 (file)
@@ -1832,9 +1832,8 @@ void ESessions::replay(MDSRank *mds)
   } else {
     dout(10) << "ESessions.replay sessionmap " << mds->sessionmap.get_version()
             << " < " << cmapv << dendl;
-    mds->sessionmap.open_sessions(client_map);
+    mds->sessionmap.replay_open_sessions(client_map);
     assert(mds->sessionmap.get_version() == cmapv);
-    mds->sessionmap.set_projected(mds->sessionmap.get_version());
   }
   update_segment();
 }
@@ -2109,10 +2108,8 @@ void EUpdate::replay(MDSRank *mds)
       bufferlist::iterator blp = client_map.begin();
       using ceph::decode;
       decode(cm, blp);
-      mds->sessionmap.open_sessions(cm);
-
+      mds->sessionmap.replay_open_sessions(cm);
       assert(mds->sessionmap.get_version() == cmapv);
-      mds->sessionmap.set_projected(mds->sessionmap.get_version());
     }
   }
   update_segment();
@@ -2950,7 +2947,7 @@ void EImportStart::replay(MDSRank *mds)
     bufferlist::iterator blp = client_map.begin();
     using ceph::decode;
     decode(cm, blp);
-    mds->sessionmap.open_sessions(cm);
+    mds->sessionmap.replay_open_sessions(cm);
     if (mds->sessionmap.get_version() != cmapv)
     {
       derr << "sessionmap version " << mds->sessionmap.get_version()
@@ -2959,7 +2956,6 @@ void EImportStart::replay(MDSRank *mds)
       mds->damaged();
       ceph_abort();  // Should be unreachable because damaged() calls respawn()
     }
-    mds->sessionmap.set_projected(mds->sessionmap.get_version());
   }
   update_segment();
 }