]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: tweak merge/split counters
authorJohn Spray <john.spray@redhat.com>
Wed, 16 Nov 2016 22:05:22 +0000 (22:05 +0000)
committerJohn Spray <john.spray@redhat.com>
Thu, 24 Nov 2016 10:26:34 +0000 (10:26 +0000)
Increment these when we have finished splitting
or merging, not partway through the process.

This makes testing more deterministic: once I've seen
the counter increment, I'm sure that the children
no longer have STATE_FRAGMENTING set as a result of
their parent's split-in-progress.

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

index 58766ae177e2ec0df02a14ec7fcb4e55d3862f3d..ad161ce1b4f79e0ddc0ca56fe3edc378bda9ae4e 100644 (file)
@@ -914,8 +914,6 @@ void CDir::split(int bits, list<CDir*>& subs, list<MDSInternalContextBase*>& wai
 {
   dout(10) << "split by " << bits << " bits on " << *this << dendl;
 
-  if (cache->mds->logger) cache->mds->logger->inc(l_mds_dir_split);
-
   assert(replay || is_complete() || !is_auth());
 
   list<frag_t> frags;
@@ -1006,8 +1004,6 @@ void CDir::merge(list<CDir*>& subs, list<MDSInternalContextBase*>& waiters, bool
 {
   dout(10) << "merge " << subs << dendl;
 
-  if (cache->mds->logger) cache->mds->logger->inc(l_mds_dir_merge);
-
   set_dir_auth(subs.front()->get_dir_auth());
   prepare_new_fragment(replay);
 
index 651f4457667c69c3b10d13be5f645141968fdc9e..ca03c6969e0125c0bd2620c4350b5e175f4c3d7a 100644 (file)
@@ -11303,7 +11303,8 @@ void MDCache::_fragment_committed(dirfrag_t basedirfrag, list<CDir*>& resultfrag
 
 void MDCache::_fragment_finish(dirfrag_t basedirfrag, list<CDir*>& resultfrags)
 {
-  dout(10) << "fragment_finish " << basedirfrag << dendl;
+  dout(10) << "fragment_finish " << basedirfrag << "resultfrags.size="
+           << resultfrags.size() << dendl;
   map<dirfrag_t, ufragment>::iterator it = uncommitted_fragments.find(basedirfrag);
   assert(it != uncommitted_fragments.end());
   ufragment &uf = it->second;
@@ -11314,6 +11315,14 @@ void MDCache::_fragment_finish(dirfrag_t basedirfrag, list<CDir*>& resultfrags)
     (*p)->auth_unpin(this);
   }
 
+  if (mds->logger) {
+    if (resultfrags.size() > 1) {
+      mds->logger->inc(l_mds_dir_split);
+    } else {
+      mds->logger->inc(l_mds_dir_merge);
+    }
+  }
+
   EFragment *le = new EFragment(mds->mdlog, EFragment::OP_FINISH, basedirfrag, uf.bits);
   mds->mdlog->start_submit_entry(le);