Skip to content

Commit a59e708

Browse files
committed
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 <[email protected]>
1 parent 3a520eb commit a59e708

File tree

4 files changed

+8
-7
lines changed

4 files changed

+8
-7
lines changed

src/crimson/osd/osd_operations/pg_advance_map.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ namespace {
2121
namespace crimson::osd {
2222

2323
PGAdvanceMap::PGAdvanceMap(
24-
ShardServices &shard_services, Ref<PG> pg, epoch_t to,
24+
Ref<PG> pg, ShardServices &shard_services, epoch_t to,
2525
PeeringCtx &&rctx, bool do_init)
26-
: shard_services(shard_services), pg(pg), to(to),
26+
: pg(pg), shard_services(shard_services), to(to),
2727
rctx(std::move(rctx)), do_init(do_init)
2828
{
2929
logger().debug("{}: created", *this);

src/crimson/osd/osd_operations/pg_advance_map.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class PGAdvanceMap : public PhasedOperationT<PGAdvanceMap> {
2525
static constexpr OperationTypeCode type = OperationTypeCode::pg_advance_map;
2626

2727
protected:
28-
ShardServices &shard_services;
2928
Ref<PG> pg;
29+
ShardServices &shard_services;
3030
PipelineHandle handle;
3131

3232
std::optional<epoch_t> from;
@@ -37,7 +37,7 @@ class PGAdvanceMap : public PhasedOperationT<PGAdvanceMap> {
3737

3838
public:
3939
PGAdvanceMap(
40-
ShardServices &shard_services, Ref<PG> pg, epoch_t to,
40+
Ref<PG> pg, ShardServices &shard_services, epoch_t to,
4141
PeeringCtx &&rctx, bool do_init);
4242
~PGAdvanceMap();
4343

src/crimson/osd/osd_operations/snaptrim_event.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ class SnapTrimEvent final : public PhasedOperationT<SnapTrimEvent> {
7777
static constexpr auto type_name = "SnapTrimEvent::wait_trim_timer";
7878
} wait_trim_timer;
7979

80-
PipelineHandle handle;
8180
Ref<PG> pg;
81+
PipelineHandle handle;
8282
SnapMapper& snap_mapper;
8383
const snapid_t snapid;
8484
const bool needs_pause;

src/crimson/osd/shard_services.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,9 @@ seastar::future<> PerShardState::broadcast_map_to_pgs(
9797
pgs.begin(), pgs.end(),
9898
[=, &shard_services](auto& pg) {
9999
return shard_services.start_operation<PGAdvanceMap>(
100+
pg.second,
100101
shard_services,
101-
pg.second, epoch,
102+
epoch,
102103
PeeringCtx{}, false).second;
103104
});
104105
}
@@ -689,7 +690,7 @@ seastar::future<Ref<PG>> ShardServices::handle_pg_create_info(
689690
rctx.transaction);
690691

691692
return start_operation<PGAdvanceMap>(
692-
*this, pg, get_map()->get_epoch(), std::move(rctx), true
693+
pg, *this, get_map()->get_epoch(), std::move(rctx), true
693694
).second.then([pg=pg] {
694695
return seastar::make_ready_future<Ref<PG>>(pg);
695696
});

0 commit comments

Comments
 (0)