From c14dd154584eef97075e4a260719b6cbe686d4c7 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 17 Jun 2013 16:38:26 -0700 Subject: [PATCH] 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 Reviewed-by: Greg Farnum (cherry picked from commit df8a3e5591948dfd94de2e06640cfe54d2de4322) --- src/client/Client.cc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 7f17a3de2a584..fc545a6834bbc 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 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; } } } -- 2.39.5