]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: handle reset during initial mds session open
authorSage Weil <sage@inktank.com>
Mon, 17 Jun 2013 23:38:26 +0000 (16:38 -0700)
committerSage Weil <sage@inktank.com>
Tue, 18 Jun 2013 02:54:51 +0000 (19:54 -0700)
If we get a reset during our attempt to open an MDS session, close out the
Connection* and retry to open the session, moving the waiters over.

Fixes: #5379
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
src/client/Client.cc

index a17254b60b52e78d7a4ca623d5a791daa4d3fc15..cfebcdb03d9337b8b310dd998cc05b0a459fedd8 100644 (file)
@@ -7889,9 +7889,22 @@ void Client::ms_handle_remote_reset(Connection *con)
        }
       }
       if (mds >= 0) {
-       if (s->state == MetaSession::STATE_CLOSING) {
+       switch (s->state) {
+       case MetaSession::STATE_CLOSING:
          ldout(cct, 1) << "reset from mds we were closing; we'll call that closed" << dendl;
          _closed_mds_session(s);
+         break;
+
+       case MetaSession::STATE_OPENING:
+         {
+           ldout(cct, 1) << "reset from mds we were opening; retrying" << dendl;
+           list<Cond*> waiters;
+           waiters.swap(s->waiting_for_open);
+           _closed_mds_session(s);
+           MetaSession *news = _get_or_open_mds_session(mds);
+           news->waiting_for_open.swap(waiters);
+         }
+         break;
        }
       }
     }