diff options
author | Sage Weil <sage@inktank.com> | 2013-06-17 16:38:26 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-06-17 19:55:12 -0700 |
commit | c14dd154584eef97075e4a260719b6cbe686d4c7 (patch) | |
tree | 0395e91803273e1bf444026ebd836f69b27b9c0e | |
parent | aa8834831dbfcdebb96841686e3707e552c349f6 (diff) | |
download | ceph-c14dd154584eef97075e4a260719b6cbe686d4c7.tar.gz |
client: handle reset during initial mds session open
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>
(cherry picked from commit df8a3e5591948dfd94de2e06640cfe54d2de4322)
-rw-r--r-- | src/client/Client.cc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/client/Client.cc b/src/client/Client.cc index 7f17a3de2a5..fc545a6834b 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -7856,9 +7856,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; } } } |