From a59e708b788d915dec90c1679f42a3a0c309ac59 Mon Sep 17 00:00:00 2001 From: Matan Breizman Date: Tue, 28 Nov 2023 15:41:35 +0000 Subject: [PATCH] crimson/osd/osd_operations: let pg reference destruct last Prevent from SnapTrimEvent::handle destruct before SnapTrimEvent::pg. The pg reference should be destructed last. May releate to: https://tracker.ceph.com/issues/63647 Signed-off-by: Matan Breizman --- src/crimson/osd/osd_operations/pg_advance_map.cc | 4 ++-- src/crimson/osd/osd_operations/pg_advance_map.h | 4 ++-- src/crimson/osd/osd_operations/snaptrim_event.h | 2 +- src/crimson/osd/shard_services.cc | 5 +++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/crimson/osd/osd_operations/pg_advance_map.cc b/src/crimson/osd/osd_operations/pg_advance_map.cc index ba63212fc7f..832794a5600 100644 --- a/src/crimson/osd/osd_operations/pg_advance_map.cc +++ b/src/crimson/osd/osd_operations/pg_advance_map.cc @@ -21,9 +21,9 @@ namespace { namespace crimson::osd { PGAdvanceMap::PGAdvanceMap( - ShardServices &shard_services, Ref pg, epoch_t to, + Ref pg, ShardServices &shard_services, epoch_t to, PeeringCtx &&rctx, bool do_init) - : shard_services(shard_services), pg(pg), to(to), + : pg(pg), shard_services(shard_services), to(to), rctx(std::move(rctx)), do_init(do_init) { logger().debug("{}: created", *this); diff --git a/src/crimson/osd/osd_operations/pg_advance_map.h b/src/crimson/osd/osd_operations/pg_advance_map.h index b712cc12e47..43be7319545 100644 --- a/src/crimson/osd/osd_operations/pg_advance_map.h +++ b/src/crimson/osd/osd_operations/pg_advance_map.h @@ -25,8 +25,8 @@ public: static constexpr OperationTypeCode type = OperationTypeCode::pg_advance_map; protected: - ShardServices &shard_services; Ref pg; + ShardServices &shard_services; PipelineHandle handle; std::optional from; @@ -37,7 +37,7 @@ protected: public: PGAdvanceMap( - ShardServices &shard_services, Ref pg, epoch_t to, + Ref pg, ShardServices &shard_services, epoch_t to, PeeringCtx &&rctx, bool do_init); ~PGAdvanceMap(); diff --git a/src/crimson/osd/osd_operations/snaptrim_event.h b/src/crimson/osd/osd_operations/snaptrim_event.h index 01cd82a245a..23f8be26c84 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.h +++ b/src/crimson/osd/osd_operations/snaptrim_event.h @@ -77,8 +77,8 @@ private: static constexpr auto type_name = "SnapTrimEvent::wait_trim_timer"; } wait_trim_timer; - PipelineHandle handle; Ref pg; + PipelineHandle handle; SnapMapper& snap_mapper; const snapid_t snapid; const bool needs_pause; diff --git a/src/crimson/osd/shard_services.cc b/src/crimson/osd/shard_services.cc index 8da4ccd8262..d21c951b88c 100644 --- a/src/crimson/osd/shard_services.cc +++ b/src/crimson/osd/shard_services.cc @@ -97,8 +97,9 @@ seastar::future<> PerShardState::broadcast_map_to_pgs( pgs.begin(), pgs.end(), [=, &shard_services](auto& pg) { return shard_services.start_operation( + pg.second, shard_services, - pg.second, epoch, + epoch, PeeringCtx{}, false).second; }); } @@ -689,7 +690,7 @@ seastar::future> ShardServices::handle_pg_create_info( rctx.transaction); return start_operation( - *this, pg, get_map()->get_epoch(), std::move(rctx), true + pg, *this, get_map()->get_epoch(), std::move(rctx), true ).second.then([pg=pg] { return seastar::make_ready_future>(pg); }); -- 2.39.5