]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: introduce MDSMap::get_mds_set_lower_bound()
authorYan, Zheng <zyan@redhat.com>
Thu, 20 Jul 2017 10:04:47 +0000 (18:04 +0800)
committerYan, Zheng <zyan@redhat.com>
Sun, 22 Jul 2018 10:22:03 +0000 (18:22 +0800)
return mds set whose states are larger than or equal to a given state

Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
(cherry picked from commit 82348673098a3a8176edb878a559eaa61068d9fd)

src/mds/MDCache.cc
src/mds/MDSMap.h
src/mds/MDSRank.cc

index 887c1062779e8562bfa923e86229cb26da568723..8f3f11ce4b80d5647f5e0ca8c83ddadcf697fef6 100644 (file)
@@ -8658,9 +8658,10 @@ void MDCache::do_open_ino_peer(inodeno_t ino, open_ino_info_t& info)
 {
   set<mds_rank_t> 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<mds_rank_t> 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
index dc283024a836e116523215701136e46eb6cfabc4..f917dbf0e2a5a8d3193013ea3ec66995ebc301e8 100644 (file)
@@ -457,12 +457,11 @@ public:
        s.insert(p.second.rank);
   }
 
-  void
-  get_clientreplay_or_active_or_stopping_mds_set(std::set<mds_rank_t>& s) const {
+  void get_mds_set_lower_bound(std::set<mds_rank_t>& s, DaemonState first) const {
     for (std::map<mds_gid_t, mds_info_t>::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<mds_rank_t>& s, DaemonState state) const {
index e6f6db65b077e3ecaae73038b4e15c41cd5f8d61..1da6f2db7d835ef8080c35218de9b4e8ddf31f94 100644 (file)
@@ -1497,7 +1497,7 @@ void MDSRank::recovery_done(int oldstate)
   // kick snaptable (resent AGREEs)
   if (mdsmap->get_tableserver() == whoami) {
     set<mds_rank_t> 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<mds_rank_t> 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<mds_rank_t>::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<mds_rank_t> 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<mds_rank_t>::iterator p = active.begin(); p != active.end(); ++p)
       if (*p != whoami &&            // not me
          oldactive.count(*p) == 0)  // newly so?