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>
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);
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;
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();
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;
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;
});
}
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);
});