]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os: implement CyanStore::get_attr()
authorKefu Chai <kchai@redhat.com>
Mon, 11 Mar 2019 13:40:42 +0000 (21:40 +0800)
committerKefu Chai <kchai@redhat.com>
Tue, 19 Mar 2019 14:39:38 +0000 (22:39 +0800)
it is used for retrieving object_info and snapset attributes.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/os/cyan_store.cc
src/crimson/os/cyan_store.h

index adebd41e74bd56befe936fbdf31e45ec7eeed0c1..d395c8631090045116e7ca2090609a674f1616c3 100644 (file)
@@ -152,6 +152,36 @@ seastar::future<bufferlist> CyanStore::read(CollectionRef c,
   return seastar::make_ready_future<bufferlist>(std::move(bl));
 }
 
+seastar::future<ceph::bufferptr> CyanStore::get_attr(CollectionRef c,
+                                                     const ghobject_t& oid,
+                                                     std::string_view name)
+{
+  logger().info("{} {} {}",
+                __func__, c->cid, oid);
+  auto o = c->get_object(oid);
+  if (!o) {
+    throw std::runtime_error(fmt::format("object does not exist: {}", oid));
+  }
+  if (auto found = o->xattr.find(name); found != o->xattr.end()) {
+    return seastar::make_ready_future<ceph::bufferptr>(found->second);
+  } else {
+    throw std::runtime_error(fmt::format("attr does not exist: {}/{}",
+                                         oid, name));
+  }
+}
+
+seastar::future<CyanStore::attrs_t> CyanStore::get_attrs(CollectionRef c,
+                                                         const ghobject_t& oid)
+{
+  logger().info("{} {} {}",
+                __func__, c->cid, oid);
+  auto o = c->get_object(oid);
+  if (!o) {
+    throw std::runtime_error(fmt::format("object does not exist: {}", oid));
+  }
+  return seastar::make_ready_future<attrs_t>(o->xattr);
+}
+
 seastar::future<CyanStore::omap_values_t>
 CyanStore::omap_get_values(CollectionRef c,
                            const ghobject_t& oid,
index 0b7f3d871e45986062ff059b39992c4c05029206..2a9c58989f72ba53a5a101271b61d05607cfe634 100644 (file)
@@ -37,6 +37,11 @@ public:
                                   uint64_t offset,
                                   size_t len,
                                   uint32_t op_flags = 0);
+  seastar::future<ceph::bufferptr> get_attr(CollectionRef c,
+                                           const ghobject_t& oid,
+                                           std::string_view name);
+  using attrs_t = std::map<std::string, ceph::bufferptr, std::less<>>;
+  seastar::future<attrs_t> get_attrs(CollectionRef c, const ghobject_t& oid);
   using omap_values_t = std::map<std::string,bufferlist, std::less<>>;
   seastar::future<omap_values_t> omap_get_values(
     CollectionRef c,