]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/pg_map: move maybe_create_pg and remove pg form header
authorMatan Breizman <mbreizma@redhat.com>
Wed, 24 Jan 2024 09:00:02 +0000 (09:00 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Wed, 24 Jan 2024 10:58:26 +0000 (10:58 +0000)
Signed-off-by: Matan Breizman <mbreizma@redhat.com>
src/crimson/osd/pg_map.cc
src/crimson/osd/pg_map.h

index 193781250f7e9c053cb19a76649bf51b0bbda1b7..5c99b82dc9dc1e3f5a4b5b93247eb37f42ebeae0 100644 (file)
@@ -16,6 +16,71 @@ using std::make_pair;
 
 namespace crimson::osd {
 
+seastar::future<core_id_t> PGShardMapping::maybe_create_pg(
+  spg_t pgid,
+  core_id_t core)
+{
+  auto find_iter = pg_to_core.find(pgid);
+  if (find_iter != pg_to_core.end()) {
+    ceph_assert_always(find_iter->second != NULL_CORE);
+    if (core != NULL_CORE) {
+      ceph_assert_always(find_iter->second == core);
+    }
+    return seastar::make_ready_future<core_id_t>(find_iter->second);
+  } else {
+    return container().invoke_on(0,[pgid, core]
+      (auto &primary_mapping) {
+      auto [insert_iter, inserted] = primary_mapping.pg_to_core.emplace(pgid, core);
+      ceph_assert_always(inserted);
+      ceph_assert_always(primary_mapping.core_to_num_pgs.size() > 0);
+      std::map<core_id_t, unsigned>::iterator core_iter;
+      if (core == NULL_CORE) {
+        core_iter = std::min_element(
+          primary_mapping.core_to_num_pgs.begin(),
+          primary_mapping.core_to_num_pgs.end(),
+            [](const auto &left, const auto &right) {
+            return left.second < right.second;
+        });
+      } else {
+        core_iter = primary_mapping.core_to_num_pgs.find(core);
+      }
+      ceph_assert_always(primary_mapping.core_to_num_pgs.end() != core_iter);
+      insert_iter->second = core_iter->first;
+      core_iter->second++;
+      return primary_mapping.container().invoke_on_others(
+        [pgid = insert_iter->first, core = insert_iter->second]
+        (auto &other_mapping) {
+        ceph_assert_always(core != NULL_CORE);
+        auto [insert_iter, inserted] = other_mapping.pg_to_core.emplace(pgid, core);
+        ceph_assert_always(inserted);
+      });
+    }).then([this, pgid] {
+      auto find_iter = pg_to_core.find(pgid);
+      return seastar::make_ready_future<core_id_t>(find_iter->second);
+    });
+  }
+}
+
+seastar::future<> PGShardMapping::remove_pg(spg_t pgid) {
+  return container().invoke_on(0, [pgid](auto &primary_mapping) {
+    auto iter = primary_mapping.pg_to_core.find(pgid);
+    ceph_assert_always(iter != primary_mapping.pg_to_core.end());
+    ceph_assert_always(iter->second != NULL_CORE);
+    auto count_iter = primary_mapping.core_to_num_pgs.find(iter->second);
+    ceph_assert_always(count_iter != primary_mapping.core_to_num_pgs.end());
+    ceph_assert_always(count_iter->second > 0);
+    --(count_iter->second);
+    primary_mapping.pg_to_core.erase(iter);
+    return primary_mapping.container().invoke_on_others(
+      [pgid](auto &other_mapping) {
+      auto iter = other_mapping.pg_to_core.find(pgid);
+      ceph_assert_always(iter != other_mapping.pg_to_core.end());
+      ceph_assert_always(iter->second != NULL_CORE);
+      other_mapping.pg_to_core.erase(iter);
+    });
+  });
+}
+
 PGMap::PGCreationState::PGCreationState(spg_t pgid) : pgid(pgid) {}
 PGMap::PGCreationState::~PGCreationState() {}
 
index 3269de43497f24dfc76163a84bef012199fa9c5a..a4a0a6dfb72684635bf4e25f99241310c8d51152 100644 (file)
@@ -37,68 +37,10 @@ public:
   /// Returns mapping for pgid, creates new one if it doesn't already exist
   seastar::future<core_id_t> maybe_create_pg(
     spg_t pgid,
-    core_id_t core = NULL_CORE) {
-    auto find_iter = pg_to_core.find(pgid);
-    if (find_iter != pg_to_core.end()) {
-      ceph_assert_always(find_iter->second != NULL_CORE);
-      if (core != NULL_CORE) {
-        ceph_assert_always(find_iter->second == core);
-      }
-      return seastar::make_ready_future<core_id_t>(find_iter->second);
-    } else {
-      return container().invoke_on(0,[pgid, core]
-        (auto &primary_mapping) {
-        auto [insert_iter, inserted] = primary_mapping.pg_to_core.emplace(pgid, core);
-        ceph_assert_always(inserted);
-        ceph_assert_always(primary_mapping.core_to_num_pgs.size() > 0);
-        std::map<core_id_t, unsigned>::iterator core_iter;
-        if (core == NULL_CORE) {
-          core_iter = std::min_element(
-            primary_mapping.core_to_num_pgs.begin(),
-            primary_mapping.core_to_num_pgs.end(),
-              [](const auto &left, const auto &right) {
-              return left.second < right.second;
-          });
-        } else {
-          core_iter = primary_mapping.core_to_num_pgs.find(core);
-        }
-        ceph_assert_always(primary_mapping.core_to_num_pgs.end() != core_iter);
-        insert_iter->second = core_iter->first;
-        core_iter->second++;
-        return primary_mapping.container().invoke_on_others(
-          [pgid = insert_iter->first, core = insert_iter->second]
-          (auto &other_mapping) {
-          ceph_assert_always(core != NULL_CORE);
-          auto [insert_iter, inserted] = other_mapping.pg_to_core.emplace(pgid, core);
-          ceph_assert_always(inserted);
-        });
-      }).then([this, pgid] {
-        auto find_iter = pg_to_core.find(pgid);
-        return seastar::make_ready_future<core_id_t>(find_iter->second);
-      });
-    }
-  }
+    core_id_t core = NULL_CORE);
 
   /// Remove pgid
-  seastar::future<> remove_pg(spg_t pgid) {
-    return container().invoke_on(0, [pgid](auto &primary_mapping) {
-      auto iter = primary_mapping.pg_to_core.find(pgid);
-      ceph_assert_always(iter != primary_mapping.pg_to_core.end());
-      ceph_assert_always(iter->second != NULL_CORE);
-      auto count_iter = primary_mapping.core_to_num_pgs.find(iter->second);
-      ceph_assert_always(count_iter != primary_mapping.core_to_num_pgs.end());
-      ceph_assert_always(count_iter->second > 0);
-      --(count_iter->second);
-      primary_mapping.pg_to_core.erase(iter);
-      return primary_mapping.container().invoke_on_others(
-        [pgid](auto &other_mapping) {
-        auto iter = other_mapping.pg_to_core.find(pgid);
-        ceph_assert_always(iter != other_mapping.pg_to_core.end());
-        ceph_assert_always(iter->second != NULL_CORE);
-        other_mapping.pg_to_core.erase(iter);
-      });
-    });
-  }
+  seastar::future<> remove_pg(spg_t pgid);
 
   size_t get_num_pgs() const { return pg_to_core.size(); }