]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: don't trim ambiguous import dirfrags
authorYan, Zheng <zheng.z.yan@intel.com>
Sun, 23 Mar 2014 12:07:35 +0000 (20:07 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Fri, 28 Mar 2014 18:08:13 +0000 (02:08 +0800)
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
src/mds/MDCache.cc
src/mds/MDCache.h

index 7bee6eaab52b9367cad6320c1661ab9c8a8e3ac9..ad3564da2b2ad44d8d3f282af42f3d49602e6802 100644 (file)
@@ -6705,8 +6705,7 @@ bool MDCache::trim_non_auth_subtree(CDir *dir)
 {
   dout(10) << "trim_non_auth_subtree(" << dir << ") " << *dir << dendl;
 
-  if (uncommitted_slave_rename_olddir.count(dir->inode) || // preserve the dir for rollback
-      my_ambiguous_imports.count(dir->dirfrag()))
+  if (!can_trim_non_auth_dirfrag(dir))
     return true;
 
   bool keep_dir = false;
@@ -6726,9 +6725,8 @@ bool MDCache::trim_non_auth_subtree(CDir *dir)
         for (list<CDir*>::iterator subdir = subdirs.begin();
             subdir != subdirs.end();
             ++subdir) {
-          if (uncommitted_slave_rename_olddir.count((*subdir)->inode) || // preserve the dir for rollback
-             my_ambiguous_imports.count((*subdir)->dirfrag()) ||
-             (*subdir)->is_subtree_root()) {
+          if ((*subdir)->is_subtree_root() ||
+             !can_trim_non_auth_dirfrag(*subdir)) {
             keep_inode = true;
             dout(10) << "trim_non_auth_subtree(" << dir << ") subdir " << *subdir << "is kept!" << dendl;
           }
@@ -6783,7 +6781,8 @@ void MDCache::try_trim_non_auth_subtree(CDir *dir)
   for (set<CDir*>::iterator p = bounds.begin(); p != bounds.end(); ++p) {
     CDir *bd = *p;
     if (bd->get_dir_auth().first != mds->whoami &&  // we are not auth
-       bd->get_num_any() == 0) {                   // and empty
+       bd->get_num_any() == 0 && // and empty
+       can_trim_non_auth_dirfrag(bd)) {
       CInode *bi = bd->get_inode();
       dout(10) << " closing empty non-auth child subtree " << *bd << dendl;
       remove_subtree(bd);
index d6b81795604ce6dd0b31c019d60e4dbd54f0a3aa..7b46bd9e3ef432f2f5eb55258de8bd23b6276268 100644 (file)
@@ -581,6 +581,10 @@ public:
   void trim_non_auth();      // trim out trimmable non-auth items
   bool trim_non_auth_subtree(CDir *directory);
   void try_trim_non_auth_subtree(CDir *dir);
+  bool can_trim_non_auth_dirfrag(CDir *dir) {
+    return my_ambiguous_imports.count((dir)->dirfrag()) == 0 &&
+          uncommitted_slave_rename_olddir.count(dir->inode) == 0;
+  }
 
   void trim_client_leases();
   void check_memory_usage();