]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/PG: define public interface for heartbeat peers
authorSage Weil <sage@redhat.com>
Mon, 18 Sep 2017 02:32:44 +0000 (21:32 -0500)
committerSage Weil <sage@redhat.com>
Fri, 6 Oct 2017 18:08:18 +0000 (13:08 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc
src/osd/PG.cc
src/osd/PG.h

index 63b2ccabf0da21581da902338310167f3c88eff3..4aa3fbe985e04d2057d0fd4b89d54c6d6c18ae2e 100644 (file)
@@ -4403,19 +4403,11 @@ void OSD::maybe_update_heartbeat_peers()
         i != pg_map.end();
         ++i) {
       PG *pg = i->second;
-      pg->heartbeat_peer_lock.Lock();
-      dout(20) << i->first << " heartbeat_peers " << pg->heartbeat_peers << dendl;
-      for (set<int>::iterator p = pg->heartbeat_peers.begin();
-          p != pg->heartbeat_peers.end();
-          ++p)
-       if (osdmap->is_up(*p))
-         _add_heartbeat_peer(*p);
-      for (set<int>::iterator p = pg->probe_targets.begin();
-          p != pg->probe_targets.end();
-          ++p)
-       if (osdmap->is_up(*p))
-         _add_heartbeat_peer(*p);
-      pg->heartbeat_peer_lock.Unlock();
+      pg->with_heartbeat_peers([&](int peer) {
+         if (osdmap->is_up(peer)) {
+           _add_heartbeat_peer(peer);
+         }
+       });
     }
   }
 
index 955d213c68166cb509f1963bec391e8333fdb933..e0456118cf6f2c622b6d9e3eecd7d3c8099a75ce 100644 (file)
@@ -8266,3 +8266,15 @@ void PG::get_pg_stats(std::function<void(const pg_stat_t&, epoch_t lec)> f)
   }
   pg_stats_publish_lock.Unlock();
 }
+
+void PG::with_heartbeat_peers(std::function<void(int)> f)
+{
+  heartbeat_peer_lock.Lock();
+  for (auto p : heartbeat_peers) {
+    f(p);
+  }
+  for (auto p : probe_targets) {
+    f(p);
+  }
+  heartbeat_peer_lock.Unlock();
+}
index f8227cfd1ec5faf29635259ac40d968f420bc090..471edbfc964e84fdf912e87f7a559972167ef2f1 100644 (file)
@@ -458,6 +458,7 @@ public:
   void dump_pgstate_history(Formatter *f);
 
   void get_pg_stats(std::function<void(const pg_stat_t&, epoch_t lec)> f);
+  void with_heartbeat_peers(std::function<void(int)> f);
 
   virtual void shutdown() = 0;