]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os: add readv method to futurized_store
authorXuehan Xu <xxhdx1985126@163.com>
Tue, 31 Mar 2020 11:14:45 +0000 (19:14 +0800)
committerXuehan Xu <xxhdx1985126@163.com>
Sun, 26 Apr 2020 07:46:35 +0000 (15:46 +0800)
Signed-off-by: Xuehan Xu <xxhdx1985126@163.com>
src/crimson/os/alienstore/alien_store.cc
src/crimson/os/alienstore/alien_store.h
src/crimson/os/cyanstore/cyan_store.cc
src/crimson/os/cyanstore/cyan_store.h
src/crimson/os/futurized_store.h

index 2f64f993804ffa5da1686f8b1fc9f8e918ad71b9..fb8dad487fbf3a6fda24d83e84be1e60c8567e6a 100644 (file)
@@ -221,6 +221,30 @@ AlienStore::read(CollectionRef ch,
   });
 }
 
+AlienStore::read_errorator::future<ceph::bufferlist>
+AlienStore::readv(CollectionRef ch,
+                 const ghobject_t& oid,
+                 interval_set<uint64_t>& m,
+                 uint32_t op_flags)
+{
+  logger().debug("{}", __func__);
+  return seastar::do_with(ceph::bufferlist{},
+    [this, ch, oid, &m, op_flags](auto& bl) {
+    return tp->submit([this, ch, oid, &m, op_flags, &bl] {
+      auto c = static_cast<AlienCollection*>(ch.get());
+      return store->readv(c->collection, oid, m, bl, op_flags);
+    }).then([&bl](int r) -> read_errorator::future<ceph::bufferlist> {
+      if (r == -ENOENT) {
+        return crimson::ct_error::enoent::make();
+      } else if (r == -EIO) {
+        return crimson::ct_error::input_output_error::make();
+      } else {
+        return read_errorator::make_ready_future<ceph::bufferlist>(std::move(bl));
+      }
+    });
+  });
+}
+
 AlienStore::get_attr_errorator::future<ceph::bufferptr>
 AlienStore::get_attr(CollectionRef ch,
                      const ghobject_t& oid,
index 87f71bd89a39639c0e5f4f81e5fbb4de44c84e53..8885a196a622bd150a129c4ee9291cdc0c85723b 100644 (file)
@@ -53,6 +53,11 @@ public:
                                    uint64_t offset,
                                    size_t len,
                                    uint32_t op_flags = 0) final;
+  read_errorator::future<ceph::bufferlist> readv(CollectionRef c,
+                                                const ghobject_t& oid,
+                                                interval_set<uint64_t>& m,
+                                                uint32_t op_flags = 0) final;
+                                             
 
   get_attr_errorator::future<ceph::bufferptr> get_attr(CollectionRef c,
                                             const ghobject_t& oid,
index efcd6e7a1f288b1aa2f8aadbfa706f439d3ce192..109767c4b1b77d11d59c19a6b8d4af552ebdc36e 100644 (file)
@@ -198,6 +198,27 @@ CyanStore::read_errorator::future<ceph::bufferlist> CyanStore::read(
   return read_errorator::make_ready_future<ceph::bufferlist>(o->read(offset, l));
 }
 
+CyanStore::read_errorator::future<ceph::bufferlist> CyanStore::readv(
+  CollectionRef ch,
+  const ghobject_t& oid,
+  interval_set<uint64_t>& m,
+  uint32_t op_flags)
+{
+  return seastar::do_with(ceph::bufferlist{},
+    [this, ch, oid, &m, op_flags](auto& bl) {
+    return crimson::do_for_each(m,
+      [this, ch, oid, op_flags, &bl](auto& p) {
+      return read(ch, oid, p.first, p.second, op_flags)
+      .safe_then([this, &bl](auto ret) {
+       bl.claim_append(ret);
+      });
+    }).safe_then([&bl] {
+      return read_errorator::make_ready_future<ceph::bufferlist>(std::move(bl));
+    });
+  });
+}
+
+
 CyanStore::get_attr_errorator::future<ceph::bufferptr> CyanStore::get_attr(
   CollectionRef ch,
   const ghobject_t& oid,
index 9af1cd640c888bb1995de21538df099b4c3a4d92..b2d1ba25203a08a4f9c6043235d707158aa712ae 100644 (file)
@@ -84,6 +84,12 @@ public:
     uint64_t offset,
     size_t len,
     uint32_t op_flags = 0) final;
+  read_errorator::future<ceph::bufferlist> readv(
+    CollectionRef c,
+    const ghobject_t& oid,
+    interval_set<uint64_t>& m,
+    uint32_t op_flags = 0) final;
+
   get_attr_errorator::future<ceph::bufferptr> get_attr(
     CollectionRef c,
     const ghobject_t& oid,
index 2a0078d0bc444ee6801e68ba7879acc8ba2687e6..a47855d8c0b763c1343c95b99ada3c3375fd730b 100644 (file)
@@ -92,6 +92,11 @@ public:
     uint64_t offset,
     size_t len,
     uint32_t op_flags = 0) = 0;
+  virtual read_errorator::future<ceph::bufferlist> readv(
+    CollectionRef c,
+    const ghobject_t& oid,
+    interval_set<uint64_t>& m,
+    uint32_t op_flags = 0) = 0;
 
   using get_attr_errorator = crimson::errorator<
     crimson::ct_error::enoent,