]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson: fix object not exist when do fiemap
authorchunmei-liu <chunmei.liu@intel.com>
Fri, 25 Feb 2022 05:48:07 +0000 (21:48 -0800)
committerchunmei-liu <chunmei.liu@intel.com>
Wed, 2 Mar 2022 22:39:55 +0000 (14:39 -0800)
Signed-off-by: chunmei-liu <chunmei.liu@intel.com>
src/crimson/os/alienstore/alien_store.cc
src/crimson/osd/pg_backend.cc

index 5035b2da14c0ec0b7c25c44edff068dc23d60bf6..54d61f76bce090ab8fa30059b402525dd730ee49 100644 (file)
@@ -586,9 +586,14 @@ AlienStore::read_errorator::future<std::map<uint64_t, uint64_t>> AlienStore::fie
     return tp->submit(ch->get_cid().hash_to_shard(tp->size()), [=, &destmap] {
       auto c = static_cast<AlienCollection*>(ch.get());
       return store->fiemap(c->collection, oid, off, len, destmap);
-    }).then([&destmap](int i) {
-      return read_errorator::make_ready_future<std::map<uint64_t, uint64_t>>(
-        std::move(destmap));
+    }).then([&destmap](int r)
+      -> read_errorator::future<std::map<uint64_t, uint64_t>> {
+      if (r == -ENOENT) {
+        return crimson::ct_error::enoent::make();
+      } else {
+        return read_errorator::make_ready_future<std::map<uint64_t, uint64_t>>(
+          std::move(destmap));
+      }
     });
   });
 }
index 627c0eb23b7f82d7d13317d3498306df08b71b1e..45c2ca05efe3cc73ed125e34a28c27d01004ff2e 100644 (file)
@@ -231,6 +231,11 @@ PGBackend::read_ierrorator::future<>
 PGBackend::sparse_read(const ObjectState& os, OSDOp& osd_op,
                 object_stat_sum_t& delta_stats)
 {
+  if (!os.exists || os.oi.is_whiteout()) {
+    logger().debug("{}: {} DNE", __func__, os.oi.soid);
+    return crimson::ct_error::enoent::make();
+  }
+
   const auto& op = osd_op.op;
   logger().trace("sparse_read: {} {}~{}",
                  os.oi.soid, op.extent.offset, op.extent.length);