Skip to content

Commit b35ed71

Browse files
committed
crimson/osd/pg_map/PGShardMapping: cleanups
Signed-off-by: Yingxin Cheng <[email protected]>
1 parent e76d3a3 commit b35ed71

File tree

2 files changed

+31
-23
lines changed

2 files changed

+31
-23
lines changed

src/crimson/osd/pg_map.cc

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,50 +14,55 @@ namespace crimson::osd {
1414

1515
seastar::future<core_id_t> PGShardMapping::get_or_create_pg_mapping(
1616
spg_t pgid,
17-
core_id_t core)
17+
core_id_t core_expected)
1818
{
1919
LOG_PREFIX(PGShardMapping::get_or_create_pg_mapping);
2020
auto find_iter = pg_to_core.find(pgid);
2121
if (find_iter != pg_to_core.end()) {
2222
ceph_assert_always(find_iter->second != NULL_CORE);
23-
if (core != NULL_CORE) {
24-
ceph_assert_always(find_iter->second == core);
23+
if (core_expected != NULL_CORE) {
24+
ceph_assert_always(find_iter->second == core_expected);
2525
}
2626
return seastar::make_ready_future<core_id_t>(find_iter->second);
2727
} else {
28-
return container().invoke_on(0,[pgid, core, FNAME]
29-
(auto &primary_mapping) {
30-
auto [insert_iter, inserted] = primary_mapping.pg_to_core.emplace(pgid, core);
28+
return container().invoke_on(
29+
0, [pgid, core_expected, FNAME](auto &primary_mapping) {
30+
auto [insert_iter, inserted] =
31+
primary_mapping.pg_to_core.emplace(pgid, core_expected);
3132
ceph_assert_always(inserted);
3233
ceph_assert_always(primary_mapping.core_to_num_pgs.size() > 0);
3334
std::map<core_id_t, unsigned>::iterator core_iter;
34-
if (core == NULL_CORE) {
35+
if (core_expected == NULL_CORE) {
3536
core_iter = std::min_element(
3637
primary_mapping.core_to_num_pgs.begin(),
3738
primary_mapping.core_to_num_pgs.end(),
38-
[](const auto &left, const auto &right) {
39+
[](const auto &left, const auto &right) {
3940
return left.second < right.second;
40-
});
41+
}
42+
);
43+
core_expected = core_iter->first;
4144
} else {
42-
core_iter = primary_mapping.core_to_num_pgs.find(core);
45+
core_iter = primary_mapping.core_to_num_pgs.find(core_expected);
4346
}
47+
assert(core_expected != NULL_CORE);
4448
ceph_assert_always(primary_mapping.core_to_num_pgs.end() != core_iter);
45-
insert_iter->second = core_iter->first;
49+
insert_iter->second = core_expected;
4650
core_iter->second++;
47-
DEBUG("mapping pg {} to core: {} with num_pgs of: {}",
48-
pgid, insert_iter->second, core_iter->second);
51+
DEBUG("mapping pg {} to core {} (primary) with num_pgs {}",
52+
pgid, core_expected, core_iter->second);
4953
return primary_mapping.container().invoke_on_others(
50-
[pgid = insert_iter->first, core = insert_iter->second, FNAME]
51-
(auto &other_mapping) {
52-
ceph_assert_always(core != NULL_CORE);
53-
auto [insert_iter, inserted] = other_mapping.pg_to_core.emplace(pgid, core);
54+
[pgid, core_expected, FNAME](auto &other_mapping) {
55+
auto [insert_iter, inserted] =
56+
other_mapping.pg_to_core.emplace(pgid, core_expected);
5457
ceph_assert_always(inserted);
55-
DEBUG("mapping pg {} to core: {}", pgid, core);
58+
DEBUG("mapping pg {} to core {} (others)",
59+
pgid, core_expected);
5660
});
5761
}).then([this, pgid, FNAME] {
5862
auto find_iter = pg_to_core.find(pgid);
5963
ceph_assert_always(find_iter != pg_to_core.end());
60-
DEBUG("returning pg {} mapping to core {}", pgid, find_iter->second);
64+
DEBUG("returning pg {} mapping to core {}",
65+
pgid, find_iter->second);
6166
return seastar::make_ready_future<core_id_t>(find_iter->second);
6267
});
6368
}
@@ -66,7 +71,8 @@ seastar::future<core_id_t> PGShardMapping::get_or_create_pg_mapping(
6671
seastar::future<> PGShardMapping::remove_pg_mapping(spg_t pgid) {
6772
LOG_PREFIX(PGShardMapping::remove_pg_mapping);
6873
DEBUG("{}", pgid);
69-
return container().invoke_on(0, [pgid, FNAME](auto &primary_mapping) {
74+
return container().invoke_on(
75+
0, [pgid, FNAME](auto &primary_mapping) {
7076
auto iter = primary_mapping.pg_to_core.find(pgid);
7177
ceph_assert_always(iter != primary_mapping.pg_to_core.end());
7278
ceph_assert_always(iter->second != NULL_CORE);
@@ -75,14 +81,14 @@ seastar::future<> PGShardMapping::remove_pg_mapping(spg_t pgid) {
7581
ceph_assert_always(count_iter->second > 0);
7682
--(count_iter->second);
7783
primary_mapping.pg_to_core.erase(iter);
78-
DEBUG("pg {} mapping erased", pgid);
84+
DEBUG("pg {} mapping erased (primary)", pgid);
7985
return primary_mapping.container().invoke_on_others(
8086
[pgid, FNAME](auto &other_mapping) {
8187
auto iter = other_mapping.pg_to_core.find(pgid);
8288
ceph_assert_always(iter != other_mapping.pg_to_core.end());
8389
ceph_assert_always(iter->second != NULL_CORE);
8490
other_mapping.pg_to_core.erase(iter);
85-
DEBUG("pg {} mapping erased", pgid);
91+
DEBUG("pg {} mapping erased (others)", pgid);
8692
});
8793
});
8894
}

src/crimson/osd/pg_map.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class PGShardMapping : public seastar::peering_sharded_service<PGShardMapping> {
3737
/// Returns mapping for pgid, creates new one if it doesn't already exist
3838
seastar::future<core_id_t> get_or_create_pg_mapping(
3939
spg_t pgid,
40-
core_id_t core = NULL_CORE);
40+
core_id_t core_expected = NULL_CORE);
4141

4242
/// Remove pgid mapping
4343
seastar::future<> remove_pg_mapping(spg_t pgid);
@@ -60,7 +60,9 @@ class PGShardMapping : public seastar::peering_sharded_service<PGShardMapping> {
6060
}
6161

6262
private:
63+
// only in shard 0
6364
std::map<core_id_t, unsigned> core_to_num_pgs;
65+
// per-shard, updated by shard 0
6466
std::map<spg_t, core_id_t> pg_to_core;
6567
};
6668

0 commit comments

Comments
 (0)