From: Samuel Just Date: Mon, 11 Dec 2023 04:00:31 +0000 (-0800) Subject: Merge pull request #53078 from xxhdx1985126/wip-crimson-pg-recovery X-Git-Tag: v19.3.0~402 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a538294a55644570502b03f5554c97a50253247d;p=ceph.git Merge pull request #53078 from xxhdx1985126/wip-crimson-pg-recovery crimson/osd/pg_recovery: avoiding duplicated object recovering Reviewed-by: Samuel Just Reviewed-by: Matan Breizman --- a538294a55644570502b03f5554c97a50253247d diff --cc src/crimson/osd/pg_recovery.cc index f74525b736e,efbbf7e4f3e..13ac069c63d --- a/src/crimson/osd/pg_recovery.cc +++ b/src/crimson/osd/pg_recovery.cc @@@ -314,19 -319,25 +328,26 @@@ RecoveryBackend::interruptible_future< const hobject_t& soid, eversion_t need) { - return pg->get_recovery_backend()->add_recovering(soid).wait_track_blocking( - trigger, - pg->get_recovery_backend()->recover_object(soid, need) - .handle_exception_interruptible( - [=, this, soid = std::move(soid)] (auto e) { - on_failed_recover({ pg->get_pg_whoami() }, soid, need); - return seastar::make_ready_future<>(); - }) - ); + logger().info("{} {} v {}", __func__, soid, need); + auto [recovering, added] = pg->get_recovery_backend()->add_recovering(soid); + if (added) { + logger().info("{} {} v {}, new recovery", __func__, soid, need); + return recovering.wait_track_blocking( + trigger, + pg->get_recovery_backend()->recover_object(soid, need) + .handle_exception_interruptible( + [=, this, soid = std::move(soid)] (auto e) { + on_failed_recover({ pg->get_pg_whoami() }, soid, need); + return seastar::make_ready_future<>(); + }) + ); + } else { + return recovering.wait_for_recovered(); + } } -void PGRecovery::on_local_recover( +RecoveryBackend::interruptible_future<> +PGRecovery::on_local_recover( const hobject_t& soid, const ObjectRecoveryInfo& recovery_info, const bool is_delete,