diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index c7e9b1433de..d2bdc42f620 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -1229,7 +1229,7 @@ seastar::future<> OSD::update_heartbeat_peers() return seastar::now();; } - return pg_shard_manager.for_each_pg([this](auto &pgid, auto &pg) { + pg_shard_manager.for_each_pgid([this](auto &pgid) { vector up, acting; osdmap->pg_to_up_acting_osds(pgid.pgid, &up, nullptr, @@ -1241,9 +1241,9 @@ seastar::future<> OSD::update_heartbeat_peers() heartbeat->add_peer(osd, osdmap->get_epoch()); } } - }).then([this] { - heartbeat->update_peers(whoami); }); + heartbeat->update_peers(whoami); + return seastar::now(); } seastar::future<> OSD::handle_peering_op( diff --git a/src/crimson/osd/pg_map.h b/src/crimson/osd/pg_map.h index 626523521b7..95b9a5075e0 100644 --- a/src/crimson/osd/pg_map.h +++ b/src/crimson/osd/pg_map.h @@ -75,6 +75,13 @@ public: } } + template + void for_each_pgid(F &&f) const { + for (const auto &i: pg_to_core) { + std::invoke(f, i.first); + } + } + private: std::map core_to_num_pgs; std::map pg_to_core; diff --git a/src/crimson/osd/pg_shard_manager.h b/src/crimson/osd/pg_shard_manager.h index 66b289a073e..cc2aa6a84e1 100644 --- a/src/crimson/osd/pg_shard_manager.h +++ b/src/crimson/osd/pg_shard_manager.h @@ -240,6 +240,17 @@ public: }); } + /** + * for_each_pgid + * + * Syncronously invokes f on each pgid + */ + template + void for_each_pgid(F &&f) const { + return get_osd_singleton_state().pg_to_shard_mapping.for_each_pgid( + std::forward(f)); + } + auto get_num_pgs() const { return get_osd_singleton_state().pg_to_shard_mapping.get_num_pgs(); }