From 196f277912a97d38507f64ded0b758a76daf2020 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Thu, 17 Dec 2009 14:27:26 -0800 Subject: [PATCH] create a new function end_session to end client sessions --- src/mds/Server.cc | 30 ++++++++++++++++++------------ src/mds/Server.h | 1 + 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/mds/Server.cc b/src/mds/Server.cc index d73b696799d8c..1e6ecc2f8fca0 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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::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::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()); } } } diff --git a/src/mds/Server.h b/src/mds/Server.h index 6c890800dec27..4aa9378d3add1 100644 --- a/src/mds/Server.h +++ b/src/mds/Server.h @@ -75,6 +75,7 @@ public: void finish_force_open_sessions(map &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); -- 2.39.5