});
}
-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));
}
});
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,
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;
}
-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
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();
}
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;
}
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);
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;
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;
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);
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;
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
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;
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);
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;
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);
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] {
[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);
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
}
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
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(
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;