LOG_PREFIX(SeaStoreS::_get_attrs);
DEBUGT("...", t);
auto& layout = onode.get_layout();
- return do_omap_get_values(t, onode, std::nullopt,
- onode.get_layout().xattr_root
+ auto root = onode.get_layout().xattr_root.get(
+ onode.get_metadata_hint(device->get_block_size()));
+ return do_omap_get_values(
+ t, onode, std::nullopt, std::move(root)
).si_then([&layout, &t, FNAME](auto p) {
auto& attrs = std::get<1>(p);
DEBUGT("got {} attrs, OI length=0x{:x}, SS length=0x{:x}",
SeaStore::Shard::omap_list_ret
SeaStore::Shard::omap_list(
Onode &onode,
- const omap_root_le_t& _root,
+ omap_root_t&& root,
Transaction& t,
const std::optional<std::string>& start,
OMapManager::omap_list_config_t config) const
{
- auto root = _root.get(
- onode.get_metadata_hint(device->get_block_size()));
if (root.is_null()) {
return seastar::make_ready_future<omap_list_bare_ret>(
true, omap_values_t{}
Transaction& t,
Onode& onode,
const std::optional<std::string>& start,
- const omap_root_le_t& root) const
+ omap_root_t&& root) const
{
LOG_PREFIX(SeaStoreS::do_omap_get_values);
DEBUGT("start={} type={} ...", t, start.has_value() ? *start : "",
auto config = OMapManager::omap_list_config_t()
.with_inclusive(false, false)
.without_max();
- return omap_list(onode, root, t, start, config
+ return omap_list(onode, std::move(root), t, start, config
).si_then([FNAME, &t](omap_values_paged_t ret) {
DEBUGT("got {} values, complete={}",
t, std::get<1>(ret).size(), std::get<0>(ret));
"omap_get_values2",
op_type_t::OMAP_GET_VALUES2,
op_flags,
- [this, start](auto &t, auto &onode) {
- const auto &root = select_log_omap_root(onode);
- return do_omap_get_values(t, onode, start, root);
+ [this, start](auto &t, auto &onode)
+ {
+ auto root = select_log_omap_root(onode).get(
+ onode.get_metadata_hint(device->get_block_size()));
+ return do_omap_get_values(
+ t, onode, start, std::move(root));
}).finally([this] {
assert(shard_stats.pending_read_num);
--(shard_stats.pending_read_num);
{
std::map<std::string, ceph::bufferlist> aset;
i.decode_attrset(aset);
- const omap_root_le_t &root = select_log_omap_root(*onode);
+ auto root = select_log_omap_root(*onode).get(
+ onode->get_metadata_hint(device->get_block_size()));
DEBUGT("op OMAP_SETKEYS, oid={}, omap size={}, type={} ...",
*ctx.transaction, oid, aset.size(), root.get_type());
return _omap_set_values(
ctx,
onode,
std::move(aset),
- root);
+ std::move(root));
}
case Transaction::OP_OMAP_SETHEADER:
{
{
omap_keys_t keys;
i.decode_keyset(keys);
- const omap_root_le_t &root = select_log_omap_root(*onode);
+ auto root = select_log_omap_root(*onode).get(
+ onode->get_metadata_hint(device->get_block_size()));
DEBUGT("op OMAP_RMKEYS, oid={}, omap size={}, type={} ...",
*ctx.transaction, oid, keys.size(), root.get_type());
return _omap_rmkeys(
ctx,
onode,
std::move(keys),
- root);
+ std::move(root));
}
case Transaction::OP_OMAP_RMKEYRANGE:
{
std::string first, last;
first = i.decode_string();
last = i.decode_string();
- const omap_root_le_t &root = select_log_omap_root(*onode);
+ auto root = select_log_omap_root(*onode).get(
+ onode->get_metadata_hint(device->get_block_size()));
DEBUGT("op OMAP_RMKEYRANGE, oid={}, first={}, last={}, type={}...",
*ctx.transaction, oid, first, last, root.get_type());
return _omap_rmkeyrange(
ctx,
onode,
std::move(first), std::move(last),
- root);
+ std::move(root));
}
case Transaction::OP_OMAP_CLEAR:
{
{
auto config = OMapManager::omap_list_config_t()
.with_inclusive(false, false);
+ auto root = onode->get_layout().get_root(type).get(
+ onode->get_metadata_hint(device->get_block_size()));
return omap_list(
*onode,
- onode->get_layout().get_root(type),
+ std::move(root),
*ctx.transaction,
start,
config
seastar::stop_iteration::yes);
}
std::string nstart = attrs.rbegin()->first;
+ auto root = d_onode->get_layout().get_root(type).get(
+ d_onode->get_metadata_hint(device->get_block_size()));
return _omap_set_values(
ctx,
d_onode,
std::map<std::string, ceph::bufferlist>(attrs.begin(), attrs.end()),
- d_onode->get_layout().get_root(type)
- ).si_then([complete, nstart=std::move(nstart),
- &start]() mutable {
+ std::move(root)
+ ).si_then([complete, nstart=std::move(nstart), &start]() mutable {
if (complete) {
return seastar::make_ready_future<
seastar::stop_iteration>(
internal_context_t &ctx,
OnodeRef &onode,
std::map<std::string, ceph::bufferlist> &&kvs,
- const omap_root_le_t &_root)
+ omap_root_t&& root)
{
Transaction& t = *ctx.transaction;
return seastar::do_with(
BtreeOMapManager(*transaction_manager),
- _root.get(onode->get_metadata_hint(device->get_block_size())),
+ std::move(root),
[this, &t, &onode, kvs=std::move(kvs)]
(auto &omap_manager, auto &root) mutable
{
internal_context_t &ctx,
OnodeRef &onode,
omap_keys_t &&keys,
- const omap_root_le_t &_root)
+ omap_root_t&& root)
{
- auto root = _root.get(
- onode->get_metadata_hint(device->get_block_size()));
if (root.is_null()) {
return seastar::now();
}
OnodeRef &onode,
std::string first,
std::string last,
- const omap_root_le_t &_root)
+ omap_root_t &&root)
{
if (first > last) {
LOG_PREFIX(SeaStoreS::_omap_rmkeyrange);
ERRORT("range error, first:{} > last:{}", *ctx.transaction, first, last);
ceph_abort();
}
- auto root = _root.get(
- onode->get_metadata_hint(device->get_block_size()));
if (root.is_null()) {
return seastar::now();
}
DEBUGT("set attrs in omap", *ctx.transaction);
return std::move(fut
).si_then([this, onode, &ctx, aset=std::move(aset)]() mutable {
+ auto root = onode->get_layout().xattr_root.get(
+ onode->get_metadata_hint(device->get_block_size()));
return _omap_set_values(
ctx,
onode,
std::move(aset),
- onode->get_layout().xattr_root);
+ std::move(root));
});
}