From: Yan, Zheng Date: Sun, 27 Jan 2013 07:22:46 +0000 (+0800) Subject: mds: mark export bounds for cross authority directory rename X-Git-Tag: v0.57~88^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5884177667b9c5ca61236e5ee375b499d69b4f11;p=ceph.git mds: mark export bounds for cross authority directory rename this guarantees that the importing MDS gets directory fragment's up-to-date fragstat/rstat. Signed-off-by: Yan, Zheng --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 04bcba712297..00e7f77b42a6 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -6322,11 +6322,22 @@ void Server::_logged_slave_rename(MDRequest *mdr, // export srci? if (srcdn->is_auth() && srcdnl->is_primary()) { - list finished; + // set export bounds for CInode::encode_export() + list bounds; + if (srcdnl->get_inode()->is_dir()) { + srcdnl->get_inode()->get_dirfrags(bounds); + for (list::iterator p = bounds.begin(); p != bounds.end(); p++) + (*p)->state_set(CDir::STATE_EXPORTBOUND); + } + map exported_client_map; bufferlist inodebl; mdcache->migrator->encode_export_inode(srcdnl->get_inode(), inodebl, exported_client_map); + + for (list::iterator p = bounds.begin(); p != bounds.end(); ++p) + (*p)->state_clear(CDir::STATE_EXPORTBOUND); + ::encode(exported_client_map, reply->inode_export); reply->inode_export.claim_append(inodebl); reply->inode_export_v = srcdnl->get_inode()->inode.version;