]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: be fairer in enqueuing purges 3893/head
authorJohn Spray <john.spray@redhat.com>
Fri, 20 Mar 2015 21:09:43 +0000 (21:09 +0000)
committerJohn Spray <john.spray@redhat.com>
Mon, 23 Mar 2015 10:19:15 +0000 (10:19 +0000)
Don't let purges that require fewer ops skip ahead of those
that require more ops.

Signed-off-by: John Spray <john.spray@redhat.com>
src/mds/StrayManager.cc

index c9423673ddc3e34e3340224abf8409da82851a03..be702aca6f4eed6858e04515d82303bc7064296e 100644 (file)
@@ -330,11 +330,16 @@ void StrayManager::enqueue(CDentry *dn, bool trunc)
     }
   }
 
-
-  // Try to purge immediately if possible, else enqueue
   const uint32_t ops_required = _calculate_ops_required(in, trunc);
 
-  bool consumed = _consume(dn, trunc, ops_required);
+  // Try to purge immediately if there is nothing in the queue, otherwise
+  // we will go to the back of the queue (even if there is allowance available
+  // to run us immediately) in order to be fair to others.
+  bool consumed = false;
+  if (ready_for_purge.empty()) {
+    consumed = _consume(dn, trunc, ops_required);
+  }
+
   if (consumed) {
     dout(10) << __func__ << ": purging this dentry immediately: "
       << *dn << dendl;