DEBUGT("...", t);
auto& layout = onode.get_layout();
return do_omap_get_values(
- t, onode, std::nullopt, get_omap_root(omap_type_t::XATTR, onode)
+ t, std::nullopt, get_omap_root(omap_type_t::XATTR, onode)
).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,
omap_root_t&& root,
Transaction& t,
const std::optional<std::string>& start,
SeaStore::base_iertr::future<SeaStore::Shard::omap_values_paged_t>
SeaStore::Shard::do_omap_get_values(
Transaction& t,
- Onode& onode,
const std::optional<std::string>& start,
omap_root_t&& root) const
{
auto config = OMapManager::omap_list_config_t()
.with_inclusive(false, false)
.without_max();
- return omap_list(onode, std::move(root), t, start, config
+ return omap_list(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));
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));
+ t, start, std::move(root));
}).finally([this] {
assert(shard_stats.pending_read_num);
--(shard_stats.pending_read_num);
case Transaction::OP_TOUCH:
{
DEBUGT("op CREATE/TOUCH, oid={} ...", *ctx.transaction, oid);
- return _touch(ctx, onode);
+ return _touch(ctx, *onode);
}
case Transaction::OP_WRITE:
{
DEBUGT("op WRITE, oid={}, 0x{:x}~0x{:x}, flags=0x{:x} ...",
*ctx.transaction, oid, off, len, fadvise_flags);
return _write(
- ctx, onode, off, len, std::move(bl),
+ ctx, *onode, off, len, std::move(bl),
fadvise_flags);
}
case Transaction::OP_TRUNCATE:
{
uint64_t off = op->off;
DEBUGT("op TRUNCATE, oid={}, 0x{:x} ...", *ctx.transaction, oid, off);
- return _truncate(ctx, onode, off);
+ return _truncate(ctx, *onode, off);
}
case Transaction::OP_SETATTR:
{
i.decode_bl(bl);
DEBUGT("op SETATTR, oid={}, attr name={}, value length=0x{:x} ...",
*ctx.transaction, oid, name, bl.length());
- return _setattrs(ctx, onode, std::move(to_set));
+ return _setattrs(ctx, *onode, std::move(to_set));
}
case Transaction::OP_SETATTRS:
{
i.decode_attrset(to_set);
DEBUGT("op SETATTRS, oid={}, attrs size={} ...",
*ctx.transaction, oid, to_set.size());
- return _setattrs(ctx, onode, std::move(to_set));
+ return _setattrs(ctx, *onode, std::move(to_set));
}
case Transaction::OP_RMATTR:
{
std::string name = i.decode_string();
DEBUGT("op RMATTR, oid={}, attr name={} ...",
*ctx.transaction, oid, name);
- return _rmattr(ctx, onode, name);
+ return _rmattr(ctx, *onode, name);
}
case Transaction::OP_RMATTRS:
{
DEBUGT("op RMATTRS, oid={} ...", *ctx.transaction, oid);
- return _rmattrs(ctx, onode);
+ return _rmattrs(ctx, *onode);
}
case Transaction::OP_OMAP_SETKEYS:
{
*ctx.transaction, oid, aset.size(), root.get_type());
return _omap_set_values(
*ctx.transaction,
- onode,
+ *onode,
std::move(aset),
std::move(root));
}
i.decode_bl(bl);
DEBUGT("op OMAP_SETHEADER, oid={}, length=0x{:x} ...",
*ctx.transaction, oid, bl.length());
- return _omap_set_header(ctx, onode, std::move(bl));
+ return _omap_set_header(ctx, *onode, std::move(bl));
}
case Transaction::OP_OMAP_RMKEYS:
{
*ctx.transaction, oid, keys.size(), root.get_type());
return _omap_rmkeys(
*ctx.transaction,
- onode,
+ *onode,
std::move(keys),
std::move(root));
}
*ctx.transaction, oid, first, last, root.get_type());
return _omap_rmkeyrange(
*ctx.transaction,
- onode,
+ *onode,
std::move(first), std::move(last),
std::move(root));
}
case Transaction::OP_OMAP_CLEAR:
{
DEBUGT("op OMAP_CLEAR, oid={} ...", *ctx.transaction, oid);
- return _omap_clear(ctx, onode);
+ return _omap_clear(ctx, *onode);
}
case Transaction::OP_ZERO:
{
extent_len_t len = op->len;
DEBUGT("op ZERO, oid={}, 0x{:x}~0x{:x} ...",
*ctx.transaction, oid, off, len);
- return _zero(ctx, onode, off, len);
+ return _zero(ctx, *onode, off, len);
}
case Transaction::OP_SETALLOCHINT:
{
{
DEBUGT("op CLONE, oid={}, dest oid={} ...",
*ctx.transaction, oid, i.get_oid(op->dest_oid));
- return _clone(ctx, onode, onodes[op->dest_oid]);
+ return _clone(ctx, *onode, *onodes[op->dest_oid]);
}
case Transaction::OP_COLL_MOVE_RENAME:
{
SeaStore::Shard::tm_ret
SeaStore::Shard::_touch(
internal_context_t &ctx,
- OnodeRef &onode)
+ Onode &onode)
{
return tm_iertr::now();
}
SeaStore::Shard::tm_ret
SeaStore::Shard::_write(
internal_context_t &ctx,
- OnodeRef &onode,
+ Onode &onode,
uint64_t offset, size_t len,
ceph::bufferlist &&_bl,
uint32_t fadvise_flags)
{
- const auto &object_size = onode->get_layout().size;
+ const auto &object_size = onode.get_layout().size;
if (offset + len > object_size) {
- onode->update_onode_size(
+ onode.update_onode_size(
*ctx.transaction,
std::max<uint64_t>(offset + len, object_size));
}
ObjectDataHandler::context_t{
*transaction_manager,
*ctx.transaction,
- *onode,
+ onode,
},
offset,
bl);
SeaStore::Shard::tm_ret
SeaStore::Shard::_clone_omaps(
Transaction& t,
- OnodeRef &onode,
- OnodeRef &d_onode,
+ Onode& onode,
+ Onode& d_onode,
const omap_type_t type)
{
return trans_intr::repeat([&t, &onode, &d_onode, this, type] {
{
auto config = OMapManager::omap_list_config_t()
.with_inclusive(false, false);
- return omap_list(*onode, get_omap_root(type, *onode), t, start, config
- ).si_then([&t, &onode, &d_onode, this, type, &start](auto p) {
+ return omap_list(get_omap_root(type, onode), t, start, config
+ ).si_then([&t, &d_onode, this, type, &start](auto p) {
auto complete = std::get<0>(p);
auto &attrs = std::get<1>(p);
if (attrs.empty()) {
t,
d_onode,
std::map<std::string, ceph::bufferlist>(attrs.begin(), attrs.end()),
- get_omap_root(type, *d_onode)
+ get_omap_root(type, d_onode)
).si_then([complete, nstart=std::move(nstart), &start]() mutable {
if (complete) {
return seastar::make_ready_future<
SeaStore::Shard::tm_ret
SeaStore::Shard::_clone(
internal_context_t &ctx,
- OnodeRef &onode,
- OnodeRef &d_onode)
+ Onode &onode,
+ Onode &d_onode)
{
return seastar::do_with(
ObjectDataHandler(max_object_size),
[this, &ctx, &onode, &d_onode](auto &objHandler)
{
- auto &object_size = onode->get_layout().size;
- d_onode->update_onode_size(*ctx.transaction, object_size);
+ auto &object_size = onode.get_layout().size;
+ d_onode.update_onode_size(*ctx.transaction, object_size);
return objHandler.clone(
ObjectDataHandler::context_t{
*transaction_manager,
*ctx.transaction,
- *onode,
- d_onode.get()});
+ onode,
+ &d_onode});
}).si_then([&ctx, &onode, &d_onode, this] {
return _clone_omaps(
*ctx.transaction, onode, d_onode, omap_type_t::XATTR);
SeaStore::Shard::tm_ret
SeaStore::Shard::_zero(
internal_context_t &ctx,
- OnodeRef &onode,
+ Onode &onode,
objaddr_t offset,
extent_len_t len)
{
*ctx.transaction, offset, len, max_object_size);
return crimson::ct_error::input_output_error::make();
}
- const auto &object_size = onode->get_layout().size;
- onode->update_onode_size(
+ const auto &object_size = onode.get_layout().size;
+ onode.update_onode_size(
*ctx.transaction,
std::max<uint64_t>(offset + len, object_size));
return seastar::do_with(
ObjectDataHandler::context_t{
*transaction_manager,
*ctx.transaction,
- *onode,
+ onode,
},
offset,
len);
SeaStore::Shard::tm_ret
SeaStore::Shard::_omap_set_values(
Transaction& t,
- OnodeRef &onode,
+ Onode& onode,
std::map<std::string, ceph::bufferlist> &&kvs,
omap_root_t&& root)
{
tm_iertr::future<> maybe_create_root = tm_iertr::now();
if (root.is_null()) {
maybe_create_root = omap_manager.initialize_omap(t,
- onode->get_metadata_hint(device->get_block_size()),
+ onode.get_metadata_hint(device->get_block_size()),
root.get_type()
).si_then([&root](auto new_root) {
assert(new_root.get_type() == root.get_type());
});
}).si_then([&onode, &t](auto root) {
if (root.must_update()) {
- omaptree_update_root(t, root, *onode);
+ omaptree_update_root(t, root, onode);
}
});
}
SeaStore::Shard::tm_ret
SeaStore::Shard::_omap_set_header(
internal_context_t &ctx,
- OnodeRef &onode,
+ Onode &onode,
ceph::bufferlist &&header)
{
std::map<std::string, bufferlist> to_set;
SeaStore::Shard::tm_ret
SeaStore::Shard::_omap_clear(
internal_context_t &ctx,
- OnodeRef &onode)
+ Onode &onode)
{
return _xattr_rmattr(
*ctx.transaction,
- get_omap_root(omap_type_t::XATTR, *onode),
+ get_omap_root(omap_type_t::XATTR, onode),
onode,
std::string(OMAP_HEADER_XATTR_KEY)
).si_then([this, &ctx, &onode] {
return omaptree_clear(
*ctx.transaction,
- get_omap_root(omap_type_t::OMAP, *onode),
- *onode);
+ get_omap_root(omap_type_t::OMAP, onode),
+ onode);
});
}
SeaStore::Shard::tm_ret
SeaStore::Shard::_omap_rmkeys(
Transaction &t,
- OnodeRef &onode,
+ Onode& onode,
omap_keys_t &&keys,
omap_root_t&& root)
{
return omap_manager.omap_rm_key(root, t, p);
}).si_then([&t, &root, &onode] {
if (root.must_update()) {
- omaptree_update_root(t, root, *onode);
+ omaptree_update_root(t, root, onode);
}
});
});
SeaStore::Shard::tm_ret
SeaStore::Shard::_omap_rmkeyrange(
Transaction& t,
- OnodeRef &onode,
+ Onode& onode,
std::string first,
std::string last,
omap_root_t &&root)
root, t, first, last, config
).si_then([&t, &root, &onode] {
if (root.must_update()) {
- omaptree_update_root(t, root, *onode);
+ omaptree_update_root(t, root, onode);
}
});
});
SeaStore::Shard::tm_ret
SeaStore::Shard::_truncate(
internal_context_t &ctx,
- OnodeRef &onode,
+ Onode &onode,
uint64_t size)
{
- onode->update_onode_size(*ctx.transaction, size);
+ onode.update_onode_size(*ctx.transaction, size);
return seastar::do_with(
ObjectDataHandler(max_object_size),
[=, this, &ctx, &onode](auto &objhandler) {
ObjectDataHandler::context_t{
*transaction_manager,
*ctx.transaction,
- *onode
+ onode
},
size);
});
SeaStore::Shard::tm_ret
SeaStore::Shard::_setattrs(
internal_context_t &ctx,
- OnodeRef &onode,
+ Onode &onode,
std::map<std::string, bufferlist>&& aset)
{
LOG_PREFIX(SeaStoreS::_setattrs);
auto fut = tm_iertr::now();
- auto& layout = onode->get_layout();
+ auto& layout = onode.get_layout();
if (auto it = aset.find(OI_ATTR); it != aset.end()) {
auto& val = it->second;
if (likely(val.length() <= onode_layout_t::MAX_OI_LENGTH)) {
// need to remove it first
fut = _xattr_rmattr(
*ctx.transaction,
- get_omap_root(omap_type_t::XATTR, *onode),
+ get_omap_root(omap_type_t::XATTR, onode),
onode,
OI_ATTR);
}
- onode->update_object_info(*ctx.transaction, val);
+ onode.update_object_info(*ctx.transaction, val);
aset.erase(it);
DEBUGT("set oi in onode layout", *ctx.transaction);
} else {
- onode->clear_object_info(*ctx.transaction);
+ onode.clear_object_info(*ctx.transaction);
}
}
if (!layout.ss_size) {
fut = _xattr_rmattr(
*ctx.transaction,
- get_omap_root(omap_type_t::XATTR, *onode),
+ get_omap_root(omap_type_t::XATTR, onode),
onode,
SS_ATTR);
}
- onode->update_snapset(*ctx.transaction, val);
+ onode.update_snapset(*ctx.transaction, val);
aset.erase(it);
DEBUGT("set ss in onode layout", *ctx.transaction);
} else {
- onode->clear_snapset(*ctx.transaction);
+ onode.clear_snapset(*ctx.transaction);
}
}
DEBUGT("set attrs in omap", *ctx.transaction);
return std::move(fut
- ).si_then([this, onode, &ctx, aset=std::move(aset)]() mutable {
+ ).si_then([this, &onode, &ctx, aset=std::move(aset)]() mutable {
return _omap_set_values(
*ctx.transaction,
onode,
std::move(aset),
- get_omap_root(omap_type_t::XATTR, *onode));
+ get_omap_root(omap_type_t::XATTR, onode));
});
}
SeaStore::Shard::tm_ret
SeaStore::Shard::_rmattr(
internal_context_t &ctx,
- OnodeRef &onode,
+ Onode &onode,
std::string name)
{
- auto& layout = onode->get_layout();
+ auto& layout = onode.get_layout();
if ((name == OI_ATTR) && (layout.oi_size > 0)) {
- onode->clear_object_info(*ctx.transaction);
+ onode.clear_object_info(*ctx.transaction);
return tm_iertr::now();
} else if ((name == SS_ATTR) && (layout.ss_size > 0)) {
- onode->clear_snapset(*ctx.transaction);
+ onode.clear_snapset(*ctx.transaction);
return tm_iertr::now();
} else {
return _xattr_rmattr(
*ctx.transaction,
- get_omap_root(omap_type_t::XATTR, *onode),
+ get_omap_root(omap_type_t::XATTR, onode),
onode,
std::move(name));
}
SeaStore::Shard::_xattr_rmattr(
Transaction& t,
omap_root_t&& root,
- OnodeRef &onode,
+ Onode& onode,
std::string &&name)
{
- LOG_PREFIX(SeaStoreS::_xattr_rmattr);
- DEBUGT("onode={}", t, *onode);
if (root.is_null()) {
return base_iertr::now();
}
return omap_manager.omap_rm_key(root, t, name
).si_then([&t, &root, &onode] {
if (root.must_update()) {
- omaptree_update_root(t, root, *onode);
+ omaptree_update_root(t, root, onode);
}
});
});
SeaStore::Shard::tm_ret
SeaStore::Shard::_rmattrs(
internal_context_t &ctx,
- OnodeRef &onode)
+ Onode &onode)
{
- onode->clear_object_info(*ctx.transaction);
- onode->clear_snapset(*ctx.transaction);
+ onode.clear_object_info(*ctx.transaction);
+ onode.clear_snapset(*ctx.transaction);
return omaptree_clear(
*ctx.transaction,
- get_omap_root(omap_type_t::XATTR, *onode),
- *onode);
+ get_omap_root(omap_type_t::XATTR, onode),
+ onode);
}
SeaStore::Shard::tm_ret