From: Samuel Just Date: Thu, 8 Sep 2022 17:36:20 +0000 (-0700) Subject: crimson/osd: update_heartbeat_peers can iterate pgs syncronously X-Git-Tag: v18.1.0~1115^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cb657b4221384d32ff302f059339a081bcb62aff;p=ceph.git crimson/osd: update_heartbeat_peers can iterate pgs syncronously OSDSingletonState has a local inventory of all pgids. Signed-off-by: Samuel Just --- diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index c7e9b1433de2..d2bdc42f6203 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 626523521b71..95b9a5075e0c 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 66b289a073eb..cc2aa6a84e17 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(); }