]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: slight cleanup of client reconnect failures
authorSage Weil <sage@newdream.net>
Thu, 5 Jun 2008 14:14:45 +0000 (07:14 -0700)
committerSage Weil <sage@newdream.net>
Thu, 5 Jun 2008 14:14:45 +0000 (07:14 -0700)
src/TODO
src/mds/MDCache.cc
src/mds/MDS.cc
src/mds/Server.cc
src/mds/Server.h

index 3f5ce04a0d3c9f48c938cb9c955f443eb302ae3b..bfd05ba6e790591e0cd856db5a9e5e271fc09a66 100644 (file)
--- a/src/TODO
+++ b/src/TODO
@@ -82,13 +82,12 @@ mds
 - lease length heuristics
   - mds lock last_change stamp?
 
-- can we get rid of the dirlock remote auth_pin weirdness on subtree roots?
+- handle slow client reconnect (i.e. after mds has gone active)
 
 - fix reconnect/rejoin open file weirdness
 - get rid of C*Discover objects for replicate_to .. encode to bufferlists directly?
 
-- failure during reconnect vs clientmap.  
-
+- can we get rid of the dirlock remote auth_pin weirdness on subtree roots?
 - anchor_destroy needs to xlock linklock.. which means it needs a Mutation wrapper?
   - ... when it gets a caller.. someday..
 
index fbb23bd580d99dab1bfdf1cf634c7501b82a35ac..9a88a8f527ea148bb5007b3fc6fe179369ec4651 100644 (file)
@@ -2923,10 +2923,12 @@ void MDCache::queue_file_recover(CInode *in)
  */
 void MDCache::identify_files_to_recover()
 {
+  /*  no.  we may have failed a reconnect, then crashed before recovering all sizes..
   if (!mds->server->failed_reconnects) {
     dout(10) << "identify_files_to_recover -- all clients reconnected, nothing to do" << dendl;
     return;
   }
+  */
 
   dout(10) << "identify_files_to_recover" << dendl;
   for (hash_map<inodeno_t,CInode*>::iterator p = inode_map.begin();
index 8a6d976295619aefe86f35213d91e38cc909b78c..5e53bec9cd1d9a5e2b60e9a309779fe3dada98b0 100644 (file)
@@ -1237,9 +1237,6 @@ void MDS::ms_handle_failure(Message *m, const entity_inst_t& inst)
   mds_lock.Lock();
   dout(0) << "ms_handle_failure to " << inst << " on " << *m << dendl;
   
-  if (m->get_type() == CEPH_MSG_MDS_MAP && m->get_dest().is_client()) 
-    server->client_reconnect_failure(m->get_dest().num());
-
   delete m;
   mds_lock.Unlock();
 }
index 8dbaa739e516c38d76994cdd899769a8678bc89f..c1820c41cbbb4611612ace1f2ec5c897fa608c6f 100644 (file)
@@ -461,18 +461,6 @@ void Server::process_reconnected_caps()
 }
 
 
-void Server::client_reconnect_failure(int from) 
-{
-  dout(5) << "client_reconnect_failure on client" << from << dendl;
-  if (mds->is_reconnect() &&
-      client_reconnect_gather.count(from)) {
-    failed_reconnects++;
-    client_reconnect_gather.erase(from);
-    if (client_reconnect_gather.empty()) 
-      reconnect_gather_finish();
-  }
-}
-
 void Server::reconnect_gather_finish()
 {
   dout(7) << "reconnect_gather_finish.  failed on " << failed_reconnects << " clients" << dendl;
@@ -489,10 +477,18 @@ void Server::reconnect_tick()
     for (set<int>::iterator p = client_reconnect_gather.begin();
         p != client_reconnect_gather.end();
         p++) {
+      Session *session = mds->sessionmap.get_session(entity_name_t::CLIENT(*p));
+      dout(1) << "reconnect gave up on " << session->inst << dendl;
+
+      /* no, we need to respect g_conf.mds_session_autoclose
+      // since we are reconnecting, cheat a bit and don't project anything.
+      mds->sessionmap.projected++;
+      mds->sessionmap.version++;
+      mdlog->submit_entry(new ESession(session->inst, false, mds->sessionmap.version));
+      mds->messenger->mark_down(session->inst.addr);
+      */
+
       failed_reconnects++;
-      dout(1) << "reconnect gave up on "
-             << mds->sessionmap.get_inst(entity_name_t::CLIENT(*p))
-             << dendl;
     }
     client_reconnect_gather.clear();
     reconnect_gather_finish();
@@ -506,7 +502,7 @@ void Server::reconnect_tick()
 
 
 /*
- * send generic response (just and error code)
+ * send generic response (just an error code)
  */
 void Server::reply_request(MDRequest *mdr, int r, CInode *tracei, CDentry *tracedn)
 {
index 1d213438a2fbd2bb359a97f87b6d62471109e635..90d768929b54f9ebc63f0f6bb942c814ce6fa93f 100644 (file)
@@ -75,7 +75,6 @@ public:
     reconnected_caps.insert(in);
   }
   void process_reconnected_caps();
-  void client_reconnect_failure(int from);
   void reconnect_gather_finish();
   void reconnect_tick();