From 07a1a2ffd1afdb727c6918bba669d535adfdeb12 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Tue, 27 Aug 2024 22:04:52 +0800 Subject: [PATCH] crimson/osd/pg: clear backfill_state when the PG goes clean Fixes: https://tracker.ceph.com/issues/67731 Signed-off-by: Xuehan Xu --- src/crimson/osd/pg.cc | 1 + src/crimson/osd/pg_recovery.cc | 6 +++++- src/crimson/osd/pg_recovery.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index cdaa1e8378fc9..1d1285d1fd008 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -513,6 +513,7 @@ PG::do_delete_work(ceph::os::Transaction &t, ghobject_t _next) Context *PG::on_clean() { + recovery_handler->on_pg_clean(); scrubber.on_primary_active_clean(); return nullptr; } diff --git a/src/crimson/osd/pg_recovery.cc b/src/crimson/osd/pg_recovery.cc index f4a7d8a63db9f..226b4dfccb275 100644 --- a/src/crimson/osd/pg_recovery.cc +++ b/src/crimson/osd/pg_recovery.cc @@ -603,9 +603,13 @@ bool PGRecovery::budget_available() const return true; } -void PGRecovery::backfilled() +void PGRecovery::on_pg_clean() { backfill_state.reset(); +} + +void PGRecovery::backfilled() +{ using LocalPeeringEvent = crimson::osd::LocalPeeringEvent; std::ignore = pg->get_shard_services().start_operation( static_cast(pg), diff --git a/src/crimson/osd/pg_recovery.h b/src/crimson/osd/pg_recovery.h index f5b8632a38263..58743be25d6b3 100644 --- a/src/crimson/osd/pg_recovery.h +++ b/src/crimson/osd/pg_recovery.h @@ -41,6 +41,7 @@ public: } seastar::future<> stop() { return seastar::now(); } + void on_pg_clean(); private: PGRecoveryListener* pg; size_t start_primary_recovery_ops( -- 2.39.5