From 35e6acf66065471c068cda10c78b6183eb244db6 Mon Sep 17 00:00:00 2001 From: Aishwarya Mathuria Date: Thu, 21 Aug 2025 06:02:44 +0000 Subject: [PATCH] crimson/osd: update snapmapper bits during pg splitting SnapMapper bits for both parent and children PGs should be updated during the splitting workflow Signed-off-by: Aishwarya Mathuria --- src/crimson/osd/osd_operations/pg_advance_map.cc | 3 +++ src/crimson/osd/pg.h | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/crimson/osd/osd_operations/pg_advance_map.cc b/src/crimson/osd/osd_operations/pg_advance_map.cc index e5a7dcd8f9d4..88abfd6e9c71 100644 --- a/src/crimson/osd/osd_operations/pg_advance_map.cc +++ b/src/crimson/osd/osd_operations/pg_advance_map.cc @@ -160,6 +160,9 @@ seastar::future<> PGAdvanceMap::split_pg( auto pg_epoch = next_map->get_epoch(); DEBUG("{}: epoch: {}", *this, pg_epoch); + unsigned new_pg_num = next_map->get_pg_num(pg->get_pgid().pool()); + pg->update_snap_mapper_bits(pg->get_pgid().get_split_bits(new_pg_num)); + co_await seastar::coroutine::parallel_for_each(split_children, [this, &next_map, pg_epoch, FNAME] (auto child_pgid) -> seastar::future<> { children_pgids.insert(child_pgid); diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 5a8a0707c95d..0b9b8e7451bf 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -602,6 +602,10 @@ public: void handle_activate_map(PeeringCtx &rctx); void handle_initialize(PeeringCtx &rctx); + void update_snap_mapper_bits(uint32_t bits) { + snap_mapper.update_bits(bits); + } + void start_split_stats(const std::set& childpgs, std::vector *out) { peering_state.start_split_stats(childpgs, out); } @@ -631,6 +635,7 @@ public: void split_into(pg_t child_pgid, Ref child, unsigned split_bits) { peering_state.split_into(child_pgid, &child->peering_state, split_bits); + child->update_snap_mapper_bits(split_bits); child->snap_trimq = snap_trimq; } -- 2.47.3