]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os: change get/set attrs value to the bufferlist type
authorXuehan Xu <xxhdx1985126@gmail.com>
Tue, 20 Apr 2021 07:45:43 +0000 (15:45 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Tue, 4 May 2021 10:26:30 +0000 (18:26 +0800)
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
12 files changed:
src/crimson/os/alienstore/alien_store.cc
src/crimson/os/alienstore/alien_store.h
src/crimson/os/cyanstore/cyan_object.h
src/crimson/os/cyanstore/cyan_store.cc
src/crimson/os/cyanstore/cyan_store.h
src/crimson/os/futurized_store.h
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/seastore.h
src/crimson/osd/ops_executer.cc
src/crimson/osd/pg_backend.cc
src/crimson/osd/pg_backend.h
src/crimson/osd/replicated_recovery_backend.cc

index 6b1c5bd5efa2e8b8cf92f25c12834b38166b9910..213750346f559b0c7cda5a0565698e800e5157bf 100644 (file)
@@ -270,24 +270,24 @@ AlienStore::readv(CollectionRef ch,
   });
 }
 
-AlienStore::get_attr_errorator::future<ceph::bufferptr>
+AlienStore::get_attr_errorator::future<ceph::bufferlist>
 AlienStore::get_attr(CollectionRef ch,
                      const ghobject_t& oid,
                      std::string_view name) const
 {
   logger().debug("{}", __func__);
-  return seastar::do_with(ceph::bufferptr{}, [=] (auto &value) {
+  return seastar::do_with(ceph::bufferlist{}, [=] (auto &value) {
     return tp->submit(ch->get_cid().hash_to_shard(tp->size()), [=, &value] {
       auto c =static_cast<AlienCollection*>(ch.get());
       return store->getattr(c->collection, oid,
                            static_cast<std::string>(name).c_str(), value);
-    }).then([oid, &value] (int r) -> get_attr_errorator::future<ceph::bufferptr> {
+    }).then([oid, &value] (int r) -> get_attr_errorator::future<ceph::bufferlist> {
       if (r == -ENOENT) {
         return crimson::ct_error::enoent::make();
       } else if (r == -ENODATA) {
         return crimson::ct_error::enodata::make();
       } else {
-        return get_attr_errorator::make_ready_future<ceph::bufferptr>(
+        return get_attr_errorator::make_ready_future<ceph::bufferlist>(
           std::move(value));
       }
     });
index bc5376e0f6cdcd0a75ac5a12b9fd8883eff9bd8f..4c5669e39ca74ef39928daaa436415533183d827 100644 (file)
@@ -59,7 +59,7 @@ public:
                                                 uint32_t op_flags = 0) final;
                                              
 
-  get_attr_errorator::future<ceph::bufferptr> get_attr(CollectionRef c,
+  get_attr_errorator::future<ceph::bufferlist> get_attr(CollectionRef c,
                                             const ghobject_t& oid,
                                             std::string_view name) const final;
   get_attrs_ertr::future<attrs_t> get_attrs(CollectionRef c,
index f19b8721280f429ccab9f48fe2a1687183fc129b..624f9513a930e8afd43f9b71cc3b41d99bbd2cdf 100644 (file)
@@ -21,7 +21,7 @@ struct Object : public boost::intrusive_ref_counter<
   bufferlist data;
   // use transparent comparator for better performance, see
   // https://en.cppreference.com/w/cpp/utility/functional/less_void
-  std::map<std::string,bufferptr,std::less<>> xattr;
+  std::map<std::string,bufferlist,std::less<>> xattr;
   bufferlist omap_header;
   std::map<std::string,bufferlist> omap;
 
index e0be221ee594893eeeb4f4d5aa7ed4deb496e0cb..330baab9db4c65b984e9d02569ad41ce3534bdee 100644 (file)
@@ -220,7 +220,7 @@ CyanStore::read_errorator::future<ceph::bufferlist> CyanStore::readv(
 }
 
 
-CyanStore::get_attr_errorator::future<ceph::bufferptr> CyanStore::get_attr(
+CyanStore::get_attr_errorator::future<ceph::bufferlist> CyanStore::get_attr(
   CollectionRef ch,
   const ghobject_t& oid,
   std::string_view name) const
@@ -233,7 +233,7 @@ CyanStore::get_attr_errorator::future<ceph::bufferptr> CyanStore::get_attr(
     return crimson::ct_error::enoent::make();
   }
   if (auto found = o->xattr.find(name); found != o->xattr.end()) {
-    return get_attr_errorator::make_ready_future<ceph::bufferptr>(found->second);
+    return get_attr_errorator::make_ready_future<ceph::bufferlist>(found->second);
   } else {
     return crimson::ct_error::enodata::make();
   }
@@ -375,8 +375,8 @@ seastar::future<> CyanStore::do_transaction(CollectionRef ch,
         std::string name = i.decode_string();
         ceph::bufferlist bl;
         i.decode_bl(bl);
-        std::map<std::string, bufferptr> to_set;
-        to_set[name] = bufferptr(bl.c_str(), bl.length());
+        std::map<std::string, bufferlist> to_set;
+       to_set.emplace(name, std::move(bl));
         r = _setattrs(cid, oid, to_set);
       }
       break;
@@ -659,7 +659,7 @@ int CyanStore::_truncate(const coll_t& cid, const ghobject_t& oid, uint64_t size
 }
 
 int CyanStore::_setattrs(const coll_t& cid, const ghobject_t& oid,
-                         std::map<std::string,bufferptr>& aset)
+                         std::map<std::string,bufferlist>& aset)
 {
   logger().debug("{} cid={} oid={}",
                 __func__, cid, oid);
@@ -670,7 +670,7 @@ int CyanStore::_setattrs(const coll_t& cid, const ghobject_t& oid,
   ObjectRef o = c->get_object(oid);
   if (!o)
     return -ENOENT;
-  for (std::map<std::string, bufferptr>::const_iterator p = aset.begin();
+  for (std::map<std::string, bufferlist>::const_iterator p = aset.begin();
        p != aset.end(); ++p)
     o->xattr[p->first] = p->second;
   return 0;
index 6d802152dc442ea859eabf4cc1fb40658c089d2b..85349b28714927c936e6edba93224d5006c0b4db 100644 (file)
@@ -89,7 +89,7 @@ public:
     interval_set<uint64_t>& m,
     uint32_t op_flags = 0) final;
 
-  get_attr_errorator::future<ceph::bufferptr> get_attr(
+  get_attr_errorator::future<ceph::bufferlist> get_attr(
     CollectionRef c,
     const ghobject_t& oid,
     std::string_view name) const final;
@@ -172,7 +172,7 @@ private:
     const std::string &last);
   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);
+                std::map<std::string,bufferlist>& aset);
   int _rm_attr(const coll_t& cid, const ghobject_t& oid,
               string_view name);
   int _create_collection(const coll_t& cid, int bits);
index d7d9c6f133ab7e646a325a1e2815de6f4a454fff..3cbc46fac74ef79b1607f6d5f895be1ac25f92fc 100644 (file)
@@ -89,14 +89,14 @@ public:
   using get_attr_errorator = crimson::errorator<
     crimson::ct_error::enoent,
     crimson::ct_error::enodata>;
-  virtual get_attr_errorator::future<ceph::bufferptr> get_attr(
+  virtual get_attr_errorator::future<ceph::bufferlist> get_attr(
     CollectionRef c,
     const ghobject_t& oid,
     std::string_view name) const = 0;
 
   using get_attrs_ertr = crimson::errorator<
     crimson::ct_error::enoent>;
-  using attrs_t = std::map<std::string, ceph::bufferptr, std::less<>>;
+  using attrs_t = std::map<std::string, ceph::bufferlist, std::less<>>;
   virtual get_attrs_ertr::future<attrs_t> get_attrs(
     CollectionRef c,
     const ghobject_t& oid) = 0;
index 8a477b591d8d2a16b8e83319568b9f48141a567a..e526ff3da89d69c7f40023907a239bf33b8d2dda 100644 (file)
@@ -194,7 +194,7 @@ SeaStore::read_errorator::future<ceph::bufferlist> SeaStore::readv(
   return read_errorator::make_ready_future<ceph::bufferlist>();
 }
 
-SeaStore::get_attr_errorator::future<ceph::bufferptr> SeaStore::get_attr(
+SeaStore::get_attr_errorator::future<ceph::bufferlist> SeaStore::get_attr(
   CollectionRef ch,
   const ghobject_t& oid,
   std::string_view name) const
@@ -566,10 +566,9 @@ SeaStore::tm_ret SeaStore::_do_transaction_step(
     case Transaction::OP_SETATTR:
     {
       std::string name = i.decode_string();
-      ceph::bufferlist bl;
+      std::map<std::string, bufferlist> to_set;
+      ceph::bufferlist& bl = to_set[name];
       i.decode_bl(bl);
-      std::map<std::string, bufferptr> to_set;
-      to_set[name] = bufferptr(bl.c_str(), bl.length());
       return _setattrs(ctx, get_onode(op->oid), std::move(to_set));
     }
     break;
@@ -809,7 +808,7 @@ SeaStore::tm_ret SeaStore::_truncate(
 SeaStore::tm_ret SeaStore::_setattrs(
   internal_context_t &ctx,
   OnodeRef &onode,
-  std::map<std::string,bufferptr> &&aset)
+  std::map<std::string, bufferlist>&& aset)
 {
   logger().debug("{} onode={}",
                 __func__, *onode);
index 7857ac0f67303e575b925da0cd86d3385f79d5be..a84c479e7e5d0c2d7764dbd05881f313cffa4cf9 100644 (file)
@@ -62,7 +62,7 @@ public:
     const ghobject_t& oid,
     interval_set<uint64_t>& m,
     uint32_t op_flags = 0) final;
-  get_attr_errorator::future<ceph::bufferptr> get_attr(
+  get_attr_errorator::future<ceph::bufferlist> get_attr(
     CollectionRef c,
     const ghobject_t& oid,
     std::string_view name) const final;
@@ -254,7 +254,7 @@ private:
   tm_ret _setattrs(
     internal_context_t &ctx,
     OnodeRef &onode,
-    std::map<std::string,bufferptr> &&aset);
+    std::map<std::string,bufferlist>&& aset);
   tm_ret _create_collection(
     internal_context_t &ctx,
     const coll_t& cid, int bits);
index 2dd1d4060bce5eb39335c0cdfc34cf841a79ffbe..3bd94b915f75b40a1a925cc2f94937786fc849a2 100644 (file)
@@ -653,11 +653,9 @@ static PG::interruptible_future<hobject_t> pgls_filter(
     logger().debug("pgls_filter: filter is interested in xattr={} for obj={}",
                    xattr, sobj);
     return backend.getxattr(sobj, xattr).safe_then_interruptible(
-      [&filter, sobj] (ceph::bufferptr bp) {
+      [&filter, sobj] (ceph::bufferlist val) {
         logger().debug("pgls_filter: got xvalue for obj={}", sobj);
 
-        ceph::bufferlist val;
-        val.push_back(std::move(bp));
         const bool filtered = filter.filter(sobj, val);
         return seastar::make_ready_future<hobject_t>(filtered ? sobj : hobject_t{});
       }, PGBackend::get_attr_errorator::all_same_way([&filter, sobj] {
index ca112a0d146a098d76f2f318ba08360998772679..a76b88b25ff25ce28e8613ce0fe5468dd68037a1 100644 (file)
@@ -77,8 +77,7 @@ PGBackend::load_metadata(const hobject_t& oid)
       [oid](auto &&attrs) -> load_metadata_ertr::future<loaded_object_md_t::ref>{
        loaded_object_md_t::ref ret(new loaded_object_md_t());
        if (auto oiiter = attrs.find(OI_ATTR); oiiter != attrs.end()) {
-         bufferlist bl;
-         bl.push_back(std::move(oiiter->second));
+         bufferlist bl = std::move(oiiter->second);
          ret->os = ObjectState(
            object_info_t(bl),
            true);
@@ -91,8 +90,7 @@ PGBackend::load_metadata(const hobject_t& oid)
        
        if (oid.is_head()) {
          if (auto ssiter = attrs.find(SS_ATTR); ssiter != attrs.end()) {
-           bufferlist bl;
-           bl.push_back(std::move(ssiter->second));
+           bufferlist bl = std::move(ssiter->second);
            ret->ss = SnapSet(bl);
          } else {
            /* TODO: add support for writing out snapsets
@@ -793,17 +791,14 @@ PGBackend::get_attr_ierrorator::future<> PGBackend::getxattr(
   }
   logger().debug("getxattr on obj={} for attr={}", os.oi.soid, name);
   return getxattr(os.oi.soid, name).safe_then_interruptible(
-    [&osd_op] (ceph::bufferptr val) {
-    osd_op.outdata.clear();
-    osd_op.outdata.push_back(std::move(val));
+    [&osd_op] (ceph::bufferlist&& val) {
+    osd_op.outdata = std::move(val);
     osd_op.op.xattr.value_len = osd_op.outdata.length();
     return get_attr_errorator::now();
-    //ctx->delta_stats.num_rd_kb += shift_round_up(osd_op.outdata.length(), 10);
   });
-  //ctx->delta_stats.num_rd++;
 }
 
-PGBackend::get_attr_ierrorator::future<ceph::bufferptr>
+PGBackend::get_attr_ierrorator::future<ceph::bufferlist>
 PGBackend::getxattr(
   const hobject_t& soid,
   std::string_view key) const
index c8befbbb6f3fb4c243e9b9b847840972749c5695..7f5a527545519e36de02baf40d1c5dd5bf9d4e11 100644 (file)
@@ -181,7 +181,7 @@ public:
   get_attr_ierrorator::future<> getxattr(
     const ObjectState& os,
     OSDOp& osd_op) const;
-  get_attr_ierrorator::future<ceph::bufferptr> getxattr(
+  get_attr_ierrorator::future<ceph::bufferlist> getxattr(
     const hobject_t& soid,
     std::string_view key) const;
   get_attr_ierrorator::future<> get_xattrs(
index e10c142296f377457b2842d3dd4ddfe173cdfada..7dab1852b6c5167be45eb7ea9977cab28b06af3f 100644 (file)
@@ -453,8 +453,8 @@ ReplicatedRecoveryBackend::read_metadata_for_push_op(
       return eversion_t{};
     }
     push_op->omap_header.claim_append(std::move(bl));
-    for (auto&& [key, val] : std::move(attrs)) {
-      push_op->attrset[key].push_back(val);
+    for (auto&& [key, val] : attrs) {
+      push_op->attrset.emplace(std::move(key), std::move(val));
     }
     logger().debug("read_metadata_for_push_op: {}", push_op->attrset[OI_ATTR]);
     object_info_t oi;