]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson: fix min_peers related logic in heartbeat
authorYingxin Cheng <yingxin.cheng@intel.com>
Tue, 25 Feb 2020 05:19:20 +0000 (13:19 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Tue, 25 Feb 2020 07:48:00 +0000 (15:48 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/osd/heartbeat.cc

index 3341c0fe0397e7ee30f2515b55e6ef4287389d94..0fb5eff7dcc93f41b6e8a46a8788df9a0c78ad63 100644 (file)
@@ -174,23 +174,19 @@ seastar::future<> Heartbeat::update_peers(int whoami)
       [=](iteration_state& s) {
         return seastar::do_until(
           [min_peers, &s, this] {
-            return peers.size() < min_peers || s.where == s.end; },
+            return peers.size() <= min_peers || s.where == s.end; },
           [&s, this] {
             return remove_peer(*s.where); }
         );
     });
   }).then([=] {
     // or too few?
-    vector<int> want;
     auto osdmap = service.get_osdmap_service().get_map();
+    auto epoch = osdmap->get_epoch();
     for (auto next = osdmap->get_next_up_osd_after(whoami);
       peers.size() < min_peers && next >= 0 && next != whoami;
       next = osdmap->get_next_up_osd_after(next)) {
-      want.push_back(next);
-    }
-    auto epoch = osdmap->get_epoch();
-    for (int osd : want) {
-      add_peer(osd, epoch);
+      add_peer(next, epoch);
     }
   });
 }