]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/pg_recovery: recover head before recovering clones 53409/head
authorXuehan Xu <xuxuehan@qianxin.com>
Tue, 12 Sep 2023 06:44:03 +0000 (14:44 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Tue, 12 Sep 2023 06:45:23 +0000 (14:45 +0800)
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/osd/pg_recovery.cc

index 09b45779ec879fda799bf41db2b8152b312de7a3..18c00b68831fb5300055c4a2e744c879f0e4285a 100644 (file)
@@ -140,13 +140,14 @@ size_t PGRecovery::start_primary_recovery_ops(
 
     hobject_t head = soid.get_head();
 
+    bool head_missing = missing.is_missing(head);
     logger().info(
       "{} {} item.need {} {} {} {} {}",
       __func__,
       soid,
       item.need,
       missing.is_missing(soid) ? " (missing)":"",
-      missing.is_missing(head) ? " (missing head)":"",
+      head_missing ? " (missing head)":"",
       pg->get_recovery_backend()->is_recovering(soid) ? " (recovering)":"",
       pg->get_recovery_backend()->is_recovering(head) ? " (recovering head)":"");
 
@@ -158,7 +159,15 @@ size_t PGRecovery::start_primary_recovery_ops(
     } else if (pg->get_recovery_backend()->is_recovering(head)) {
       ++skipped;
     } else {
-      out->emplace_back(recover_missing(trigger, soid, item.need));
+      if (head_missing) {
+       auto it = missing.get_items().find(head);
+       assert(it != missing.get_items().end());
+       auto head_need = it->second.need;
+       out->emplace_back(recover_missing(trigger, head, head_need));
+       ++skipped;
+      } else {
+       out->emplace_back(recover_missing(trigger, soid, item.need));
+      }
       ++started;
     }