]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/crimson/os/cyanstore/cyan_store.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / crimson / os / cyanstore / cyan_store.h
index d1172c679cfb6c9129b118c37305bc1b9e36342b..07a8ff29e7e8394083f9e17fb8b355dc85318dd8 100644 (file)
@@ -16,6 +16,7 @@
 #include "osd/osd_types.h"
 #include "include/uuid.h"
 
+#include "crimson/os/cyanstore/cyan_object.h"
 #include "crimson/os/futurized_store.h"
 
 namespace ceph::os {
@@ -35,16 +36,49 @@ class CyanStore final : public FuturizedStore {
   uuid_d osd_fsid;
 
 public:
+  class CyanOmapIterator final : public OmapIterator {
+  public:
+    CyanOmapIterator() {}
+    CyanOmapIterator(ObjectRef obj) : obj(obj) {
+      iter = obj->omap.begin();
+    }
+    seastar::future<> seek_to_first() final;
+    seastar::future<> upper_bound(const std::string &after) final;
+    seastar::future<> lower_bound(const std::string &to) final;
+    bool valid() const final;
+    seastar::future<> next() final;
+    std::string key() final {
+      return iter->first;
+    }
+    virtual seastar::future<std::string> tail_key(){
+      return seastar::make_ready_future<std::string>((++obj->omap.end())->first);
+    }
+    virtual ceph::buffer::list value() {
+      return iter->second;
+    }
+    virtual int status() const {
+      return iter != obj->omap.end() ? 0 : -1;
+    }
+    virtual ~CyanOmapIterator() {}
+  private:
+    std::map<std::string, bufferlist>::const_iterator iter;
+    ObjectRef obj;
+  };
 
   CyanStore(const std::string& path);
   ~CyanStore() final;
 
-  seastar::future<> stop() final {return seastar::now();}
+  seastar::future<> stop() final {
+    return seastar::now();
+  }
   seastar::future<> mount() final;
   seastar::future<> umount() final;
 
   seastar::future<> mkfs(uuid_d new_osd_fsid) final;
   seastar::future<store_statfs_t> stat() const final;
+  seastar::future<struct stat> stat(
+    CollectionRef c,
+    const ghobject_t& oid) final;
 
   read_errorator::future<ceph::bufferlist> read(
     CollectionRef c,
@@ -52,6 +86,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,
@@ -60,24 +100,28 @@ public:
     CollectionRef c,
     const ghobject_t& oid);
 
-  seastar::future<omap_values_t> omap_get_values(
+  read_errorator::future<omap_values_t> omap_get_values(
     CollectionRef c,
     const ghobject_t& oid,
     const omap_keys_t& keys) final;
 
-  seastar::future<std::vector<ghobject_t>, ghobject_t> list_objects(
-    CollectionRef c,
-    const ghobject_t& start,
-    const ghobject_t& end,
-    uint64_t limit) const final;
-
   /// Retrieves paged set of values > start (if present)
-  seastar::future<bool, omap_values_t> omap_get_values(
+  read_errorator::future<std::tuple<bool, omap_values_t>> omap_get_values(
     CollectionRef c,           ///< [in] collection
     const ghobject_t &oid,     ///< [in] oid
     const std::optional<std::string> &start ///< [in] start, empty for begin
     ) final; ///< @return <done, values> values.empty() iff done
 
+  seastar::future<std::tuple<std::vector<ghobject_t>, ghobject_t>> list_objects(
+    CollectionRef c,
+    const ghobject_t& start,
+    const ghobject_t& end,
+    uint64_t limit) const final;
+
+  read_errorator::future<ceph::bufferlist> omap_get_header(
+    CollectionRef c,
+    const ghobject_t& oid) final;
+
   seastar::future<CollectionRef> create_new_collection(const coll_t& cid) final;
   seastar::future<CollectionRef> open_collection(const coll_t& cid) final;
   seastar::future<std::vector<coll_t>> list_collections() final;
@@ -87,16 +131,31 @@ public:
 
   seastar::future<> write_meta(const std::string& key,
                  const std::string& value) final;
-  seastar::future<int, std::string> read_meta(const std::string& key) final;
+  seastar::future<std::tuple<int, std::string>>
+  read_meta(const std::string& key) final;
   uuid_d get_fsid() const final;
   unsigned get_max_attr_name_length() const final;
 
+  seastar::future<OmapIteratorRef> get_omap_iterator(
+    CollectionRef c,
+    const ghobject_t& oid);
+
+  seastar::future<std::map<uint64_t, uint64_t>> fiemap(CollectionRef c,
+                                                      const ghobject_t& oid,
+                                                      uint64_t off,
+                                                      uint64_t len);
+
 private:
   int _remove(const coll_t& cid, const ghobject_t& oid);
   int _touch(const coll_t& cid, const ghobject_t& oid);
   int _write(const coll_t& cid, const ghobject_t& oid,
             uint64_t offset, size_t len, const ceph::bufferlist& bl,
             uint32_t fadvise_flags);
+  int _zero(const coll_t& cid, const ghobject_t& oid,
+           uint64_t offset, size_t len);
+  int _omap_clear(
+    const coll_t& cid,
+    const ghobject_t& oid);
   int _omap_set_values(
     const coll_t& cid,
     const ghobject_t& oid,
@@ -117,6 +176,8 @@ private:
   int _truncate(const coll_t& cid, const ghobject_t& oid, uint64_t size);
   int _setattrs(const coll_t& cid, const ghobject_t& oid,
                 std::map<std::string,bufferptr>& aset);
+  int _rm_attr(const coll_t& cid, const ghobject_t& oid,
+              string_view name);
   int _create_collection(const coll_t& cid, int bits);
   boost::intrusive_ptr<Collection> _get_collection(const coll_t& cid);
 };