]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: update_heartbeat_peers can iterate pgs syncronously
authorSamuel Just <sjust@redhat.com>
Thu, 8 Sep 2022 17:36:20 +0000 (10:36 -0700)
committerSamuel Just <sjust@redhat.com>
Tue, 27 Sep 2022 02:35:41 +0000 (19:35 -0700)
OSDSingletonState has a local inventory of all pgids.

Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/osd/osd.cc
src/crimson/osd/pg_map.h
src/crimson/osd/pg_shard_manager.h

index c7e9b1433de24ce007db8b034ca3cd80fb62103a..d2bdc42f6203dc8c72c733ec0c7ad32d582a3429 100644 (file)
@@ -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<int> 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(
index 626523521b715d70339dcea9534919b11ea74889..95b9a5075e0cfbb4a8d0b6e6df07e87c84d9f50c 100644 (file)
@@ -75,6 +75,13 @@ public:
     }
   }
 
+  template <typename F>
+  void for_each_pgid(F &&f) const {
+    for (const auto &i: pg_to_core) {
+      std::invoke(f, i.first);
+    }
+  }
+
 private:
   std::map<core_id_t, unsigned> core_to_num_pgs;
   std::map<spg_t, core_id_t> pg_to_core;
index 66b289a073eb098c0cb304518af2837e3cd7569b..cc2aa6a84e17e175e363a8c4ab5b49da84660331 100644 (file)
@@ -240,6 +240,17 @@ public:
       });
   }
 
+  /**
+   * for_each_pgid
+   *
+   * Syncronously invokes f on each pgid
+   */
+  template <typename F>
+  void for_each_pgid(F &&f) const {
+    return get_osd_singleton_state().pg_to_shard_mapping.for_each_pgid(
+      std::forward<F>(f));
+  }
+
   auto get_num_pgs() const {
     return get_osd_singleton_state().pg_to_shard_mapping.get_num_pgs();
   }