]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd/osd_operations: let pg reference destruct last
authorMatan Breizman <mbreizma@redhat.com>
Tue, 28 Nov 2023 15:41:35 +0000 (15:41 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Wed, 10 Jan 2024 10:39:51 +0000 (10:39 +0000)
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 <mbreizma@redhat.com>
src/crimson/osd/osd_operations/pg_advance_map.cc
src/crimson/osd/osd_operations/pg_advance_map.h
src/crimson/osd/osd_operations/snaptrim_event.h
src/crimson/osd/shard_services.cc

index ba63212fc7fc929cb6b19747432f5879f523c1fd..832794a56003fd50ce76a545977746ed5f81e2b9 100644 (file)
@@ -21,9 +21,9 @@ namespace {
 namespace crimson::osd {
 
 PGAdvanceMap::PGAdvanceMap(
-  ShardServices &shard_services, Ref<PG> pg, epoch_t to,
+  Ref<PG> 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);
index b712cc12e477835fd02284e87bc1c8329923c1b7..43be7319545b1a693a65e8431e23bdd061b7ac71 100644 (file)
@@ -25,8 +25,8 @@ public:
   static constexpr OperationTypeCode type = OperationTypeCode::pg_advance_map;
 
 protected:
-  ShardServices &shard_services;
   Ref<PG> pg;
+  ShardServices &shard_services;
   PipelineHandle handle;
 
   std::optional<epoch_t> from;
@@ -37,7 +37,7 @@ protected:
 
 public:
   PGAdvanceMap(
-    ShardServices &shard_services, Ref<PG> pg, epoch_t to,
+    Ref<PG> pg, ShardServices &shard_services, epoch_t to,
     PeeringCtx &&rctx, bool do_init);
   ~PGAdvanceMap();
 
index 01cd82a245a7d59247a78361e68ee67b79e18e71..23f8be26c8416890733988d4ceef01abc0bcb269 100644 (file)
@@ -77,8 +77,8 @@ private:
     static constexpr auto type_name = "SnapTrimEvent::wait_trim_timer";
   } wait_trim_timer;
 
-  PipelineHandle handle;
   Ref<PG> pg;
+  PipelineHandle handle;
   SnapMapper& snap_mapper;
   const snapid_t snapid;
   const bool needs_pause;
index 8da4ccd8262c77b3938017cccacc6a76ace08f7a..d21c951b88cd528c0e5ad22d1b89c685967b09da 100644 (file)
@@ -97,8 +97,9 @@ seastar::future<> PerShardState::broadcast_map_to_pgs(
     pgs.begin(), pgs.end(),
     [=, &shard_services](auto& pg) {
       return shard_services.start_operation<PGAdvanceMap>(
+       pg.second,
        shard_services,
-       pg.second, epoch,
+       epoch,
        PeeringCtx{}, false).second;
     });
 }
@@ -689,7 +690,7 @@ seastar::future<Ref<PG>> ShardServices::handle_pg_create_info(
            rctx.transaction);
 
          return start_operation<PGAdvanceMap>(
-           *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<Ref<PG>>(pg);
          });