]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: allow reconnect as long as we are in reconnect state
authorSage Weil <sage@newdream.net>
Fri, 2 Apr 2010 20:34:11 +0000 (13:34 -0700)
committerSage Weil <sage@newdream.net>
Sat, 3 Apr 2010 03:07:29 +0000 (20:07 -0700)
This used to work.. I think this is fallout from the mds session state
simplification (CLOSED was != NEW before).

src/mds/Server.cc

index 1ce9888788bc4ff47075375c3debfdf8cc13b60d..8d05c7abc85e7f2ac5d84966180cbe1b656eee43 100644 (file)
@@ -409,7 +409,7 @@ void Server::terminate_sessions()
 
 void Server::find_idle_sessions()
 {
-  dout(10) << "find_idle_sessions" << dendl;
+  dout(10) << "find_idle_sessions.  laggy until " << mds->laggy_until << dendl;
   
   // timeout/stale
   //  (caps go stale, lease die)
@@ -527,21 +527,12 @@ void Server::handle_client_reconnect(MClientReconnect *m)
   delay -= reconnect_start;
   dout(10) << " reconnect_start " << reconnect_start << " delay " << delay << dendl;
 
-  if (!mds->is_reconnect() || session->is_closed()) {
-    if (!mds->is_reconnect()) {
-      // XXX maybe in the future we can do better than this?
-      dout(1) << " no longer in reconnect state, ignoring reconnect, sending close" << dendl;
-      ss << "denied reconnect attempt (mds is " << ceph_mds_state_name(mds->get_state())
-        << ") from " << m->get_source_inst();
-    } else if (!session) {
-      dout(1) << " no session for " << m->get_source() << ", ignoring reconnect, sending close" << dendl;
-      ss << "denied reconnect attempt from " << m->get_source_inst() << " (no session)";
-    } else if (session->is_closed()) {
-      dout(1) << " no session for " << m->get_source() << ", ignoring reconnect, sending close" << dendl;
-      ss << "denied reconnect attempt from " << m->get_source_inst() << " (session closed)";
-    } else
-      assert(0);
-    ss << " after " << delay << " (allowed interval " << g_conf.mds_reconnect_timeout << ")";
+  if (!mds->is_reconnect()) {
+    // XXX maybe in the future we can do better than this?
+    dout(1) << " no longer in reconnect state, ignoring reconnect, sending close" << dendl;
+    ss << "denied reconnect attempt (mds is " << ceph_mds_state_name(mds->get_state())
+       << ") from " << m->get_source_inst()
+       << " after " << delay << " (allowed interval " << g_conf.mds_reconnect_timeout << ")";
     mds->logclient.log(LOG_INFO, ss);
     mds->messenger->send_message(new MClientSession(CEPH_SESSION_CLOSE), m->get_source_inst());
     delete m;