]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add projected rename's subtree bounds to ESubtreeMap
authorYan, Zheng <zheng.z.yan@intel.com>
Sun, 27 Jan 2013 06:41:50 +0000 (14:41 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Tue, 29 Jan 2013 02:17:37 +0000 (10:17 +0800)
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
src/mds/MDCache.cc

index c9be8caf1c58230cdd09d788eb97889071009474..84502b0918aae3a77e43a9159257a62274325f67 100644 (file)
@@ -2333,7 +2333,11 @@ ESubtreeMap *MDCache::create_subtree_map()
          continue;
        }
 
+       bool journal_dir = false;
        if (dir->is_subtree_root()) {
+         if (le->subtrees.count(newparent->dirfrag()) &&
+             oldparent->get_dir_auth() != newparent->get_dir_auth())
+           journal_dir = true;
          // children are fine.  change parent.
          _move_subtree_map_bound(dir->dirfrag(), oldparent->dirfrag(), newparent->dirfrag(),
                                  le->subtrees);
@@ -2343,13 +2347,17 @@ ESubtreeMap *MDCache::create_subtree_map()
          if (oldparent->get_dir_auth() != newparent->get_dir_auth()) {
            dout(10) << " creating subtree for " << dir->dirfrag() << dendl;
            // if oldparent is auth, subtree is mine; include it.
-           if (oldparent->get_dir_auth().first == mds->whoami)
+           if (le->subtrees.count(oldparent->dirfrag())) {
              le->subtrees[dir->dirfrag()].clear();
+             journal_dir = true;
+           }
            // if newparent is auth, subtree is a new bound
-           if (le->subtrees.count(newparent->dirfrag()))
+           if (le->subtrees.count(newparent->dirfrag())) {
              le->subtrees[newparent->dirfrag()].push_back(dir->dirfrag());  // newparent is auth; new bound
+             journal_dir = true;
+           }
            newparent = dir;
-       }
+         }
          
          // see if any old bounds move to the new parent.
          for (set<CDir*>::iterator p = subtrees[oldparent].begin();
@@ -2361,6 +2369,10 @@ ESubtreeMap *MDCache::create_subtree_map()
                                      le->subtrees);
          }
        }
+       if (journal_dir) {
+         le->metablob.add_dir_context(dir, EMetaBlob::TO_ROOT);
+         le->metablob.add_dir(dir, false);
+       }
       }
     }
   }