From b8f33aab64ced76de3206110a36783458404da85 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 17 Sep 2017 21:32:44 -0500 Subject: [PATCH] osd/PG: define public interface for heartbeat peers Signed-off-by: Sage Weil --- src/osd/OSD.cc | 18 +++++------------- src/osd/PG.cc | 12 ++++++++++++ src/osd/PG.h | 1 + 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 63b2ccabf0d..4aa3fbe985e 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 955d213c681..e0456118cf6 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 f8227cfd1ec..471edbfc964 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; -- 2.39.5