}
SeaStore::Shard::tm_ret
-SeaStore::Shard::_remove(
+SeaStore::Shard::_remove_omaps(
internal_context_t &ctx,
- OnodeRef &onode)
+ OnodeRef &onode,
+ omap_root_t &&omap_root)
{
- LOG_PREFIX(SeaStore::_remove);
- DEBUGT("onode={}", *ctx.transaction, *onode);
- auto fut = BtreeOMapManager::omap_clear_iertr::now();
- auto omap_root = onode->get_layout().omap_root.get(
- onode->get_metadata_hint(device->get_block_size()));
if (omap_root.get_location() != L_ADDR_NULL) {
- fut = seastar::do_with(
+ return seastar::do_with(
BtreeOMapManager(*transaction_manager),
- onode->get_layout().omap_root.get(
- onode->get_metadata_hint(device->get_block_size())),
+ std::move(omap_root),
[&ctx, onode](auto &omap_manager, auto &omap_root) {
return omap_manager.omap_clear(
omap_root,
*ctx.transaction
+ ).handle_error_interruptible(
+ crimson::ct_error::input_output_error::pass_further(),
+ crimson::ct_error::assert_all{
+ "Invalid error in SeaStore::_remove"
+ }
);
});
}
- return fut.si_then([this, &ctx, onode] {
+ return tm_iertr::now();
+}
+
+SeaStore::Shard::tm_ret
+SeaStore::Shard::_remove(
+ internal_context_t &ctx,
+ OnodeRef &onode)
+{
+ LOG_PREFIX(SeaStore::_remove);
+ DEBUGT("onode={}", *ctx.transaction, *onode);
+ return _remove_omaps(
+ ctx,
+ onode,
+ onode->get_layout().omap_root.get(
+ onode->get_metadata_hint(device->get_block_size()))
+ ).si_then([this, &ctx, onode]() mutable {
+ return _remove_omaps(
+ ctx,
+ onode,
+ onode->get_layout().xattr_root.get(
+ onode->get_metadata_hint(device->get_block_size())));
+ }).si_then([this, &ctx, onode] {
return seastar::do_with(
ObjectDataHandler(max_object_size),
[=, this, &ctx](auto &objhandler) {