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);
+ }
+ });
}
}
}
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();
+}
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;