From 9f08e0ea8f8372cace2c29d6af89c71953a7c84a Mon Sep 17 00:00:00 2001 From: xuxuehan xuxuehan Date: Fri, 14 Feb 2020 19:52:28 +0800 Subject: [PATCH] crimson/osd: make PGRecovery::start_primary_recovery_ops take objs recovered by UrgentRecovery into account Signed-off-by: Xuehan Xu --- src/crimson/osd/pg_recovery.cc | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/crimson/osd/pg_recovery.cc b/src/crimson/osd/pg_recovery.cc index c0ce0088b2344..7d70b5e8ffbfd 100644 --- a/src/crimson/osd/pg_recovery.cc +++ b/src/crimson/osd/pg_recovery.cc @@ -147,13 +147,15 @@ size_t PGRecovery::start_primary_recovery_ops( pg->get_recovery_backend()->is_recovering(head) ? " (recovering head)":""); // TODO: handle lost/unfound - if (!pg->get_recovery_backend()->is_recovering(soid)) { - if (pg->get_recovery_backend()->is_recovering(head)) { - ++skipped; - } else { - out->push_back(recover_missing(soid, item.need)); - ++started; - } + if (pg->get_recovery_backend()->is_recovering(soid)) { + auto& recovery_waiter = pg->get_recovery_backend()->get_recovering(soid); + out->push_back(recovery_waiter.wait_for_recovered_blocking()); + ++started; + } else if (pg->get_recovery_backend()->is_recovering(head)) { + ++skipped; + } else { + out->push_back(recover_missing(soid, item.need)); + ++started; } if (!skipped) -- 2.39.5