]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
create a new function end_session to end client sessions
authorGreg Farnum <gregf@hq.newdream.net>
Thu, 17 Dec 2009 22:27:26 +0000 (14:27 -0800)
committerGreg Farnum <gregf@hq.newdream.net>
Thu, 17 Dec 2009 22:27:59 +0000 (14:27 -0800)
src/mds/Server.cc
src/mds/Server.h

index d73b696799d8cc52791032d18dbe4bae5dccdda3..1e6ecc2f8fca0a0c568d4a7b7a53c6731c0d6526 100644 (file)
@@ -415,18 +415,24 @@ void Server::find_idle_sessions()
     mds->logclient.log(LOG_INFO, ss);
 
     dout(10) << "autoclosing stale session " << session->inst << " last " << session->last_cap_renew << dendl;
-    mds->sessionmap.set_state(session, Session::STATE_STALE_PURGING);
-    if (session->prealloc_inos.empty()) {
-      _finish_session_purge(session);
-    } else {
-      C_Gather *fin = new C_Gather(new C_MDS_session_purged(this, session));
-      for (map<inodeno_t,inodeno_t>::iterator p = session->prealloc_inos.m.begin();
-          p != session->prealloc_inos.m.end();
-          p++) {
-       inodeno_t last = p->first + p->second;
-       for (inodeno_t i = p->first; i < last; i = i + 1)
-         mds->mdcache->purge_prealloc_ino(i, fin->new_sub());
-      }
+    end_session(session);
+  }
+}
+
+void Server::end_session (Session *session)
+{
+  assert (session);
+  mds->sessionmap.set_state(session, Session::STATE_STALE_PURGING);
+  if (session->prealloc_inos.empty()) {
+    _finish_session_purge(session);
+  } else {
+    C_Gather *fin = new C_Gather(new C_MDS_session_purged(this, session));
+    for (map<inodeno_t,inodeno_t>::iterator p = session->prealloc_inos.m.begin();
+        p != session->prealloc_inos.m.end();
+        p++) {
+      inodeno_t last = p->first + p->second;
+      for (inodeno_t i = p->first; i < last; i = i + 1)
+       mds->mdcache->purge_prealloc_ino(i, fin->new_sub());
     }
   }
 }
index 6c890800dec27fd474a2799acb794b89c486f339..4aa9378d3add1e0437346daf118edfc46882b54e 100644 (file)
@@ -75,6 +75,7 @@ public:
   void finish_force_open_sessions(map<client_t,entity_inst_t> &cm);
   void terminate_sessions();
   void find_idle_sessions();
+  void end_session (Session *session);
   void reconnect_clients();
   void handle_client_reconnect(class MClientReconnect *m);
   //void process_reconnect_cap(CInode *in, int from, ceph_mds_cap_reconnect& capinfo);