From: Yan, Zheng Date: Mon, 19 Jun 2017 07:22:08 +0000 (+0800) Subject: mds: don't forge replica dirfrag X-Git-Tag: ses5-milestone7~3^2~7^2~8 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=ad2a95d98c65501747209fae78745e97584805a0;p=ceph.git mds: don't forge replica dirfrag MDCache::forge_replica_dir() set wrong dir_auth if the forged replica dirfrag is subtree root. Signed-off-by: "Yan, Zheng" --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 7208ec8e95b9d..ebecf6583110c 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -624,7 +624,7 @@ void MDCache::open_root() assert(!root->is_auth()); CDir *rootdir = root->get_dirfrag(frag_t()); if (!rootdir) { - discover_dir_frag(root, frag_t(), new C_MDS_RetryOpenRoot(this)); + open_remote_dirfrag(root, frag_t(), new C_MDS_RetryOpenRoot(this)); return; } } @@ -8177,22 +8177,11 @@ CInode *MDCache::cache_traverse(const filepath& fp) void MDCache::open_remote_dirfrag(CInode *diri, frag_t approxfg, MDSInternalContextBase *fin) { dout(10) << "open_remote_dir on " << *diri << dendl; - assert(diri->is_dir()); assert(!diri->is_auth()); assert(diri->get_dirfrag(approxfg) == 0); - mds_rank_t auth = diri->authority().first; - - if (!mds->is_cluster_degraded() || - mds->mdsmap->get_state(auth) >= MDSMap::STATE_REJOIN) { - discover_dir_frag(diri, approxfg, fin); - } else { - // mds is down or recovering. forge a replica! - forge_replica_dir(diri, approxfg, auth); - if (fin) - mds->queue_waiter(fin); - } + discover_dir_frag(diri, approxfg, fin); } @@ -10184,21 +10173,6 @@ CDir *MDCache::add_replica_dir(bufferlist::iterator& p, CInode *diri, mds_rank_t return dir; } -CDir *MDCache::forge_replica_dir(CInode *diri, frag_t fg, mds_rank_t from) -{ - assert(mds->mdsmap->get_state(from) < MDSMap::STATE_REJOIN); - - // forge a replica. - CDir *dir = diri->add_dirfrag( new CDir(diri, fg, this, false) ); - - // i'm assuming this is a subtree root. - adjust_subtree_auth(dir, from); - - dout(7) << "forge_replica_dir added " << *dir << " while mds." << from << " is down" << dendl; - - return dir; -} - CDentry *MDCache::add_replica_dentry(bufferlist::iterator& p, CDir *dir, list& finished) { string name; diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index 1d90fb8ce6697..3b0801958913d 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -1013,7 +1013,6 @@ public: } CDir* add_replica_dir(bufferlist::iterator& p, CInode *diri, mds_rank_t from, list& finished); - CDir* forge_replica_dir(CInode *diri, frag_t fg, mds_rank_t from); CDentry *add_replica_dentry(bufferlist::iterator& p, CDir *dir, list& finished); CInode *add_replica_inode(bufferlist::iterator& p, CDentry *dn, list& finished);