]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: make PGRecovery::start_primary_recovery_ops take objs recovered by Urgen... 38880/head
authorxuxuehan xuxuehan <xuxuehan@vkrs04.ops.bjzt.360es.cn>
Fri, 14 Feb 2020 11:52:28 +0000 (19:52 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Fri, 15 Jan 2021 04:04:33 +0000 (12:04 +0800)
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/osd/pg_recovery.cc

index c0ce0088b234448f53fbf1de6339fde06fdd3359..7d70b5e8ffbfd15fca876ec35d80422e67fdc7e3 100644 (file)
@@ -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)