]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds: remove fail-safe queueing replay request
authorYan, Zheng <zyan@redhat.com>
Wed, 14 Sep 2016 10:22:01 +0000 (18:22 +0800)
committerYan, Zheng <zyan@redhat.com>
Fri, 23 Sep 2016 13:35:45 +0000 (21:35 +0800)
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 <zyan@redhat.com>
src/mds/MDCache.cc
src/mds/MDSRank.cc
src/mds/Server.cc

index c5b0ebae13cc3193c0190796a588587746ba13dc..e9a261b47431736cbff989fcdeec76ad7f2aa83e 100644 (file)
@@ -9073,12 +9073,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();
 
index fdd6e680c468bfba07e8386cecf7af761c5bb645..33af04e36cd77bb305f5771a6ff8f0dd1ed8659d 100644 (file)
@@ -1253,9 +1253,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());
index 40d9fd8db3f7ce2cf14dcc38f9abb1cf7c106111..7bd12170f2aa6779697012b934c96bfc611ca134 100644 (file)
@@ -963,6 +963,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;