From: Sage Weil Date: Mon, 18 Sep 2017 02:32:44 +0000 (-0500) Subject: osd/PG: define public interface for heartbeat peers X-Git-Tag: v13.0.1~634^2~21 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b8f33aab64ced76de3206110a36783458404da85;p=ceph.git osd/PG: define public interface for heartbeat peers Signed-off-by: Sage Weil --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 63b2ccabf0da..4aa3fbe985e0 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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::iterator p = pg->heartbeat_peers.begin(); - p != pg->heartbeat_peers.end(); - ++p) - if (osdmap->is_up(*p)) - _add_heartbeat_peer(*p); - for (set::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); + } + }); } } diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 955d213c6816..e0456118cf6f 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -8266,3 +8266,15 @@ void PG::get_pg_stats(std::function f) } pg_stats_publish_lock.Unlock(); } + +void PG::with_heartbeat_peers(std::function f) +{ + heartbeat_peer_lock.Lock(); + for (auto p : heartbeat_peers) { + f(p); + } + for (auto p : probe_targets) { + f(p); + } + heartbeat_peer_lock.Unlock(); +} diff --git a/src/osd/PG.h b/src/osd/PG.h index f8227cfd1ec5..471edbfc964e 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -458,6 +458,7 @@ public: void dump_pgstate_history(Formatter *f); void get_pg_stats(std::function f); + void with_heartbeat_peers(std::function f); virtual void shutdown() = 0;