@@ -14,50 +14,55 @@ namespace crimson::osd {
1414
1515seastar::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(
6671seastar::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}
0 commit comments