From: Yan, Zheng Date: Wed, 14 Sep 2016 10:22:01 +0000 (+0800) Subject: mds: remove fail-safe queueing replay request X-Git-Tag: v10.2.4~65^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3a79db10f259d66ca17c2152cf639a63f245505d;p=ceph.git mds: remove fail-safe queueing replay request MDSRank::queue_one_replay() does not create active request immediately, it just queues corresponding C_MDS_RetryMessage for execution. So the fail-safe code can queue an extra replay request. This can cause replay requests be processed out-of-order Fixes: http://tracker.ceph.com/issues/17271 Signed-off-by: Yan, Zheng (cherry picked from commit d755a4a78242293dd3103bdd0748292df3034563) --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index df126d6aca9..32269695e22 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -9075,12 +9075,6 @@ void MDCache::request_cleanup(MDRequestRef& mdr) // remove from map active_requests.erase(mdr->reqid); - // fail-safe! - if (was_replay && active_requests.empty()) { - dout(10) << " fail-safe queueing next replay op" << dendl; - mds->queue_one_replay(); - } - if (mds->logger) log_stat(); diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 5c2bfe39ebb..19a584a65cc 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -1240,9 +1240,7 @@ void MDSRank::clientreplay_start() bool MDSRank::queue_one_replay() { if (replay_queue.empty()) { - if (mdcache->get_num_client_requests() == 0) { - clientreplay_done(); - } + clientreplay_done(); return false; } queue_waiter(replay_queue.front()); diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 7edb4b39fae..61320c3348d 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -955,6 +955,7 @@ void Server::force_clients_readonly() void Server::journal_and_reply(MDRequestRef& mdr, CInode *in, CDentry *dn, LogEvent *le, MDSInternalContextBase *fin) { dout(10) << "journal_and_reply tracei " << in << " tracedn " << dn << dendl; + assert(!mdr->has_completed); // note trace items for eventual reply. mdr->tracei = in;