From 1a75da4b0d22a765eca4807252a0667c2a2266cc Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Tue, 25 Mar 2025 21:02:03 +0000 Subject: [PATCH] crimson/.../pg_shard_manager: add start_pg_operation_active Messages between OSDs for PGs that have already completed peering require fewer checks than otherwise. Signed-off-by: Samuel Just --- src/crimson/osd/pg_shard_manager.h | 44 ++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/crimson/osd/pg_shard_manager.h b/src/crimson/osd/pg_shard_manager.h index f7bd7a6c08e30..d492b0184afa4 100644 --- a/src/crimson/osd/pg_shard_manager.h +++ b/src/crimson/osd/pg_shard_manager.h @@ -7,6 +7,8 @@ #include #include +#include "crimson/common/log.h" + #include "crimson/osd/osd_connection_priv.h" #include "crimson/osd/shard_services.h" #include "crimson/osd/pg_map.h" @@ -432,6 +434,48 @@ public: return std::make_pair(id, std::move(fut)); } + template + auto start_pg_operation_active(Args&&... args) { + LOG_PREFIX(PGShardManager::start_pg_operation_active); + auto op = get_local_state().registry.create_operation( + std::forward(args)...); + SUBDEBUG(osd, "{} starting", *op); + + auto &opref = *op; + if constexpr (T::is_trackable) { + op->template track_event(); + } + + auto core = get_pg_to_shard_mapping().get_pg_mapping(opref.get_pgid()); + if (core == NULL_CORE) { + // PG target has been removed, there *must* have been an interval change + SUBDEBUG( + osd, + "{} no core mapping for pg {} found, must be from a prior interval", + opref, opref.get_pgid()); + return seastar::now(); + } + + return this->template with_remote_shard_state_and_op( + core, std::move(op), + [FNAME](ShardServices &target_shard_services, + typename T::IRef op) { + auto &opref = *op; + auto pg = target_shard_services.get_pg( + opref.get_pgid()); + if (!pg) { + SUBDEBUG( + osd, + "{} pg {} not present, must be from prior interval", + opref, opref.get_pgid()); + return seastar::now(); + } + return op->with_pg( + target_shard_services, pg + ).finally([op] {}); + }); + } + #undef FORWARD #undef FORWARD_CONST #undef FORWARD_TO_OSD_SINGLETON -- 2.39.5