From ddac5d1cb85f182e5984929b667f4dc56ea97984 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Thu, 1 Feb 2024 13:18:38 +0800 Subject: [PATCH] crimson/osd/shard_services: make sure that only up/acting members can create pgs Fixes: https://tracker.ceph.com/issues/64282 Signed-off-by: Xuehan Xu --- src/crimson/osd/shard_services.cc | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/crimson/osd/shard_services.cc b/src/crimson/osd/shard_services.cc index ff35df280ad84..fffb7f8d3cdfe 100644 --- a/src/crimson/osd/shard_services.cc +++ b/src/crimson/osd/shard_services.cc @@ -610,15 +610,23 @@ seastar::future> ShardServices::make_pg( seastar::future> ShardServices::handle_pg_create_info( std::unique_ptr info) { - LOG_PREFIX(OSDSingletonState::trim_maps); return seastar::do_with( std::move(info), - [FNAME, this](auto &info) + [this](auto &info) -> seastar::future> { return get_map(info->epoch).then( - [&info, FNAME, this](cached_map_t startmap) + [&info, this](cached_map_t startmap) -> seastar::future, cached_map_t>> { + LOG_PREFIX(ShardServices::handle_pg_create_info); const spg_t &pgid = info->pgid; + if (!get_map()->is_up_acting_osd_shard(pgid, local_state.whoami) + || !startmap->is_up_acting_osd_shard(pgid, local_state.whoami)) { + DEBUG("ignore pgid {}, doesn't exist anymore, discarding"); + local_state.pg_map.pg_creation_canceled(pgid); + return seastar::make_ready_future< + std::tuple, OSDMapService::cached_map_t> + >(std::make_tuple(Ref(), startmap)); + } if (info->by_mon) { int64_t pool_id = pgid.pgid.pool(); const pg_pool_t *pool = get_map()->get_pg_pool(pool_id); -- 2.39.5