From d5fc5708fa00fc2ce206e6a4e8cbb89dedb729ec Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Wed, 9 Sep 2020 12:37:25 +0800 Subject: [PATCH] crimson/osd: use temporary RecoveryInfo for recovering object delete ops Right now, recover_delete use WaitForObjectRecovery::pi, which may not be available if there were no pulling, to pass recovery_info, so use temporary recovery_info instead Fixes: https://tracker.ceph.com/issues/47357 Signed-off-by: Xuehan Xu --- src/crimson/osd/replicated_recovery_backend.cc | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/crimson/osd/replicated_recovery_backend.cc b/src/crimson/osd/replicated_recovery_backend.cc index d866f4e393e..e888d4e9142 100644 --- a/src/crimson/osd/replicated_recovery_backend.cc +++ b/src/crimson/osd/replicated_recovery_backend.cc @@ -245,19 +245,17 @@ seastar::future<> ReplicatedRecoveryBackend::local_recover_delete( } return seastar::make_ready_future<>(); }).safe_then([this, soid, epoch_to_freeze, need] { - auto& recovery_waiter = recovering[soid]; - auto& pi = *recovery_waiter.pi; - pi.recovery_info.soid = soid; - pi.recovery_info.version = need; - return on_local_recover_persist(soid, pi.recovery_info, + ObjectRecoveryInfo recovery_info; + recovery_info.soid = soid; + recovery_info.version = need; + return on_local_recover_persist(soid, recovery_info, true, epoch_to_freeze); }, PGBackend::load_metadata_ertr::all_same_way( [this, soid, epoch_to_freeze, need] (auto e) { - auto& recovery_waiter = recovering[soid]; - auto& pi = *recovery_waiter.pi; - pi.recovery_info.soid = soid; - pi.recovery_info.version = need; - return on_local_recover_persist(soid, pi.recovery_info, + ObjectRecoveryInfo recovery_info; + recovery_info.soid = soid; + recovery_info.version = need; + return on_local_recover_persist(soid, recovery_info, true, epoch_to_freeze); }) ); -- 2.39.5