From 287981abf254135a77f2302201883800bff057d9 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Wed, 8 Jul 2015 16:06:22 +0800 Subject: [PATCH 1/2] client: dont't release aborted request immediately Signed-off-by: Yan, Zheng --- src/client/Client.cc | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 7973dde..2bc242c 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -1556,8 +1556,6 @@ int Client::make_request(MetaRequest *request, if (!request->reply) { assert(request->aborted); assert(!request->got_unsafe); - request->item.remove_myself(); - unregister_request(request); put_request(request); // ours return -ETIMEDOUT; } @@ -1908,6 +1906,13 @@ void Client::_kick_stale_sessions() void Client::send_request(MetaRequest *request, MetaSession *session, bool drop_cap_releases) { + if (request->aborted) { + ldout(cct, 10) << "send_request aborted request " << request->get_tid() << dendl; + request->item.remove_myself(); + unregister_request(request); + return; + } + // make the request mds_rank_t mds = session->mds_num; ldout(cct, 10) << "send_request rebuilding request " << request->get_tid() @@ -2447,31 +2452,33 @@ void Client::kick_requests(MetaSession *session) { ldout(cct, 10) << "kick_requests for mds." << session->mds_num << dendl; for (map::iterator p = mds_requests.begin(); - p != mds_requests.end(); - ++p) { - if (p->second->got_unsafe) + p != mds_requests.end(); ) { + MetaRequest* req = p->second; + ++p; + if (req->got_unsafe) continue; - if (p->second->retry_attempt > 0) + if (req->retry_attempt > 0) continue; // new requests only - if (p->second->mds == session->mds_num) { - send_request(p->second, session); - } + if (req->mds == session->mds_num) + send_request(req, session); } } void Client::resend_unsafe_requests(MetaSession *session) { for (xlist::iterator iter = session->unsafe_requests.begin(); - !iter.end(); - ++iter) - send_request(*iter, session); + !iter.end(); ) { + MetaRequest *req = *iter; + ++iter; + send_request(req, session); + } // also re-send old requests when MDS enters reconnect stage. So that MDS can // process completed requests in clientreplay stage. for (map::iterator p = mds_requests.begin(); - p != mds_requests.end(); - ++p) { + p != mds_requests.end(); ) { MetaRequest *req = p->second; + ++p; if (req->got_unsafe) continue; if (req->retry_attempt == 0) -- 1.9.3