From: Yan, Zheng Date: Thu, 20 Jul 2017 10:04:47 +0000 (+0800) Subject: mds: introduce MDSMap::get_mds_set_lower_bound() X-Git-Tag: v12.2.8~46^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a957a92498d5e35fcf8f59ff30204765309f8e25;p=ceph.git mds: introduce MDSMap::get_mds_set_lower_bound() return mds set whose states are larger than or equal to a given state Signed-off-by: "Yan, Zheng" (cherry picked from commit 82348673098a3a8176edb878a559eaa61068d9fd) --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 887c1062779..8f3f11ce4b8 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -8658,9 +8658,10 @@ void MDCache::do_open_ino_peer(inodeno_t ino, open_ino_info_t& info) { set all, active; mds->mdsmap->get_mds_set(all); - mds->mdsmap->get_clientreplay_or_active_or_stopping_mds_set(active); if (mds->get_state() == MDSMap::STATE_REJOIN) - mds->mdsmap->get_mds_set(active, MDSMap::STATE_REJOIN); + mds->mdsmap->get_mds_set_lower_bound(active, MDSMap::STATE_REJOIN); + else + mds->mdsmap->get_mds_set_lower_bound(active, MDSMap::STATE_CLIENTREPLAY); dout(10) << "do_open_ino_peer " << ino << " active " << active << " all " << all << " checked " << info.checked << dendl; @@ -8872,7 +8873,7 @@ void MDCache::_do_find_ino_peer(find_ino_peer_info_t& fip) { set all, active; mds->mdsmap->get_mds_set(all); - mds->mdsmap->get_clientreplay_or_active_or_stopping_mds_set(active); + mds->mdsmap->get_mds_set_lower_bound(active, MDSMap::STATE_CLIENTREPLAY); dout(10) << "_do_find_ino_peer " << fip.tid << " " << fip.ino << " active " << active << " all " << all diff --git a/src/mds/MDSMap.h b/src/mds/MDSMap.h index dc283024a83..f917dbf0e2a 100644 --- a/src/mds/MDSMap.h +++ b/src/mds/MDSMap.h @@ -457,12 +457,11 @@ public: s.insert(p.second.rank); } - void - get_clientreplay_or_active_or_stopping_mds_set(std::set& s) const { + void get_mds_set_lower_bound(std::set& s, DaemonState first) const { for (std::map::const_iterator p = mds_info.begin(); p != mds_info.end(); ++p) - if (p->second.state >= STATE_CLIENTREPLAY && p->second.state <= STATE_STOPPING) + if (p->second.state >= first && p->second.state <= STATE_STOPPING) s.insert(p->second.rank); } void get_mds_set(std::set& s, DaemonState state) const { diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index e6f6db65b07..1da6f2db7d8 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -1497,7 +1497,7 @@ void MDSRank::recovery_done(int oldstate) // kick snaptable (resent AGREEs) if (mdsmap->get_tableserver() == whoami) { set active; - mdsmap->get_clientreplay_or_active_or_stopping_mds_set(active); + mdsmap->get_mds_set_lower_bound(active, MDSMap::STATE_CLIENTREPLAY); snapserver->finish_recovery(active); } @@ -1720,12 +1720,8 @@ void MDSRankDispatcher::handle_mds_map( oldstate == MDSMap::STATE_STARTING) { // ACTIVE|CLIENTREPLAY|REJOIN => we can discover from them. set olddis, dis; - oldmap->get_mds_set(olddis, MDSMap::STATE_ACTIVE); - oldmap->get_mds_set(olddis, MDSMap::STATE_CLIENTREPLAY); - oldmap->get_mds_set(olddis, MDSMap::STATE_REJOIN); - mdsmap->get_mds_set(dis, MDSMap::STATE_ACTIVE); - mdsmap->get_mds_set(dis, MDSMap::STATE_CLIENTREPLAY); - mdsmap->get_mds_set(dis, MDSMap::STATE_REJOIN); + oldmap->get_mds_set_lower_bound(olddis, MDSMap::STATE_REJOIN); + mdsmap->get_mds_set_lower_bound(dis, MDSMap::STATE_REJOIN); for (set::iterator p = dis.begin(); p != dis.end(); ++p) if (*p != whoami && // not me olddis.count(*p) == 0) { // newly so? @@ -1749,10 +1745,8 @@ void MDSRankDispatcher::handle_mds_map( if (oldstate >= MDSMap::STATE_CLIENTREPLAY && (is_clientreplay() || is_active() || is_stopping())) { set oldactive, active; - oldmap->get_mds_set(oldactive, MDSMap::STATE_ACTIVE); - oldmap->get_mds_set(oldactive, MDSMap::STATE_CLIENTREPLAY); - mdsmap->get_mds_set(active, MDSMap::STATE_ACTIVE); - mdsmap->get_mds_set(active, MDSMap::STATE_CLIENTREPLAY); + oldmap->get_mds_set_lower_bound(oldactive, MDSMap::STATE_CLIENTREPLAY); + mdsmap->get_mds_set_lower_bound(active, MDSMap::STATE_CLIENTREPLAY); for (set::iterator p = active.begin(); p != active.end(); ++p) if (*p != whoami && // not me oldactive.count(*p) == 0) // newly so?