]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/replicated_recovery_backend: ignore the recovery of delete
authorXuehan Xu <xuxuehan@qianxin.com>
Thu, 21 Nov 2024 08:22:47 +0000 (16:22 +0800)
committerMatan Breizman <mbreizma@redhat.com>
Sun, 5 Jan 2025 16:22:12 +0000 (16:22 +0000)
objects

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/osd/replicated_recovery_backend.cc

index 31f05836b8eabef173c288734f3e9407c0163e67..e969ea17a31d03d7a2d876dc1dd5d955358c898e 100644 (file)
@@ -35,6 +35,15 @@ ReplicatedRecoveryBackend::recover_object(
     logger().debug("recover_object: loading obc: {}", soid);
     return pg.obc_loader.with_obc<RWState::RWREAD>(soid,
       [this, soid, need](auto head, auto obc) {
+      if (!obc->obs.exists) {
+        // XXX: this recovery must be triggered by backfills and the corresponding
+        //      object must have been deleted by some client request after the object
+        //      is enqueued for push but before the lock is acquired by the recovery.
+        //
+        //      Abort the recovery in this case, a "recover_delete" must have been
+        //      added for this object by the client request that deleted it.
+        return interruptor::now();
+      }
       logger().debug("recover_object: loaded obc: {}", obc->obs.oi.soid);
       auto& recovery_waiter = get_recovering(soid);
       recovery_waiter.obc = obc;