#define assert_aligned(x) ceph_assert(((x)%ctx.tm.get_block_size()) == 0)
using context_t = ObjectDataHandler::context_t;
-using get_ertr = ObjectDataHandler::write_ertr;
+using get_iertr = ObjectDataHandler::write_iertr;
auto read_pin(
context_t ctx,
return ctx.tm.pin_to_extent<ObjectDataBlock>(
ctx.t,
std::move(pin)
- ).handle_error(
- get_ertr::pass_further{},
+ ).handle_error_interruptible(
+ get_iertr::pass_further{},
crimson::ct_error::assert_all{ "read_pin: invalid error" }
);
}
context_t ctx,
lba_pin_list_t &pins)
{
- return crimson::do_for_each(
- pins.begin(),
- pins.end(),
+ return trans_intr::do_for_each(
+ pins,
[ctx](auto &pin) {
return ctx.tm.dec_ref(
ctx.t,
pin->get_laddr()
- ).safe_then(
+ ).si_then(
[](auto){},
- ObjectDataHandler::write_ertr::pass_further{},
+ ObjectDataHandler::write_iertr::pass_further{},
crimson::ct_error::assert_all{
"object_data_handler::do_removals invalid error"
}
context_t ctx,
extent_to_write_list_t &to_write)
{
- return crimson::do_for_each(
- to_write.begin(),
- to_write.end(),
+ return trans_intr::do_for_each(
+ to_write,
[ctx](auto ®ion) {
if (region.to_write) {
assert_aligned(region.addr);
ctx.t,
region.addr,
region.len
- ).safe_then([®ion](auto extent) {
+ ).si_then([®ion](auto extent) {
if (extent->get_laddr() != region.addr) {
logger().debug(
"object_data_handler::do_insertions alloc got addr {},"
ceph_assert(extent->get_length() == region.len);
auto iter = region.to_write->cbegin();
iter.copy(region.len, extent->get_bptr().c_str());
- return ObjectDataHandler::write_ertr::now();
+ return ObjectDataHandler::write_iertr::now();
});
} else {
return ctx.tm.reserve_region(
ctx.t,
region.addr,
region.len
- ).safe_then([®ion](auto pin) {
+ ).si_then([®ion](auto pin) {
ceph_assert(pin->get_length() == region.len);
ceph_assert(pin->get_laddr() == region.addr);
- return ObjectDataHandler::write_ertr::now();
+ return ObjectDataHandler::write_iertr::now();
});
}
});
using split_ret_bare = std::pair<
std::optional<extent_to_write_t>,
std::optional<bufferptr>>;
-using split_ret = get_ertr::future<split_ret_bare>;
+using split_ret = get_iertr::future<split_ret_bare>;
split_ret split_pin_left(context_t ctx, LBAPinRef &pin, laddr_t offset)
{
const auto pin_offset = pin->get_laddr();
ceph_assert(offset >= pin_offset);
if (offset == pin_offset) {
// Aligned, no tail and no extra extent
- return get_ertr::make_ready_future<split_ret_bare>(
+ return get_iertr::make_ready_future<split_ret_bare>(
std::nullopt,
std::nullopt);
} else if (pin->get_paddr().is_zero()) {
auto zero_extent_len = aligned_offset - pin_offset;
assert_aligned(zero_extent_len);
auto zero_prepend_len = offset - aligned_offset;
- return get_ertr::make_ready_future<split_ret_bare>(
+ return get_iertr::make_ready_future<split_ret_bare>(
(zero_extent_len == 0
? std::nullopt
: std::make_optional(extent_to_write_t(pin_offset, zero_extent_len))),
// Data, return up to offset to prepend
auto to_prepend = offset - pin->get_laddr();
return read_pin(ctx, pin->duplicate()
- ).safe_then([to_prepend](auto extent) {
- return get_ertr::make_ready_future<split_ret_bare>(
+ ).si_then([to_prepend](auto extent) {
+ return get_iertr::make_ready_future<split_ret_bare>(
std::nullopt,
bufferptr(extent->get_bptr(), 0, to_prepend));
});
assert_aligned(pin_end);
ceph_assert(pin_end >= end);
if (end == pin_end) {
- return get_ertr::make_ready_future<split_ret_bare>(
+ return get_iertr::make_ready_future<split_ret_bare>(
std::nullopt,
std::nullopt);
} else if (pin->get_paddr().is_zero()) {
auto zero_suffix_len = aligned_end - end;
auto zero_extent_len = pin_end - aligned_end;
assert_aligned(zero_extent_len);
- return get_ertr::make_ready_future<split_ret_bare>(
+ return get_iertr::make_ready_future<split_ret_bare>(
(zero_extent_len == 0
? std::nullopt
: std::make_optional(extent_to_write_t(aligned_end, zero_extent_len))),
);
} else {
return read_pin(ctx, pin->duplicate()
- ).safe_then([end, pin_begin, pin_end](auto extent) {
- return get_ertr::make_ready_future<split_ret_bare>(
+ ).si_then([end, pin_begin, pin_end](auto extent) {
+ return get_iertr::make_ready_future<split_ret_bare>(
std::nullopt,
bufferptr(
extent->get_bptr(),
std::forward<F>(f),
[ctx](auto &object_data, auto &f) {
return std::invoke(f, object_data
- ).safe_then([ctx, &object_data] {
+ ).si_then([ctx, &object_data] {
if (object_data.must_update()) {
ctx.onode.get_mutable_layout(ctx.t).object_data.update(object_data);
}
ceph_assert(size <= MAX_OBJECT_SIZE);
if (!object_data.is_null()) {
ceph_assert(object_data.get_reserved_data_len() == MAX_OBJECT_SIZE);
- return write_ertr::now();
+ return write_iertr::now();
} else {
return ctx.tm.reserve_region(
ctx.t,
0 /* TODO -- pass hint based on object hash */,
MAX_OBJECT_SIZE
- ).safe_then([&object_data](auto pin) {
+ ).si_then([&object_data](auto pin) {
ceph_assert(pin->get_length() == MAX_OBJECT_SIZE);
object_data.update_reserved(
pin->get_laddr(),
pin->get_length());
- return write_ertr::now();
+ return write_iertr::now();
});
}
}
ctx.t,
object_data.get_reserved_data_base() + size,
object_data.get_reserved_data_len() - size
- ).safe_then([ctx, size, &pins, &object_data, &to_write](auto _pins) {
+ ).si_then([ctx, size, &pins, &object_data, &to_write](auto _pins) {
_pins.swap(pins);
ceph_assert(pins.size());
auto &pin = *pins.front();
to_write.emplace_back(
pin.get_laddr(),
object_data.get_reserved_data_len() - pin_offset);
- return clear_ertr::now();
+ return clear_iertr::now();
} else {
return read_pin(
ctx,
pin.duplicate()
- ).safe_then([size, pin_offset, &pin, &object_data, &to_write](
- auto extent) {
+ ).si_then([size, pin_offset, &pin, &object_data, &to_write](
+ auto extent) {
bufferlist bl;
bl.append(
bufferptr(
to_write.emplace_back(
object_data.get_reserved_data_base() + size,
object_data.get_reserved_data_len() - size);
- return clear_ertr::now();
+ return clear_iertr::now();
});
}
- }).safe_then([ctx, &pins] {
+ }).si_then([ctx, &pins] {
return do_removals(ctx, pins);
- }).safe_then([ctx, &to_write] {
+ }).si_then([ctx, &to_write] {
return do_insertions(ctx, to_write);
- }).safe_then([size, &object_data] {
+ }).si_then([size, &object_data] {
if (size == 0) {
object_data.clear();
}
- return ObjectDataHandler::clear_ertr::now();
+ return ObjectDataHandler::clear_iertr::now();
});
});
}
ctx,
pins.front(),
offset
- ).safe_then([ctx, pin_begin, &offset, &bl, &pins, &to_write](
- auto p) {
+ ).si_then([ctx, pin_begin, &offset, &bl, &pins, &to_write](
+ auto p) {
auto &[left_extent, headptr] = p;
if (left_extent) {
ceph_assert(left_extent->addr == pin_begin);
ctx,
pins.back(),
offset + bl.length());
- }).safe_then([ctx, pin_end, &offset, &bl, &to_write](
- auto p) {
+ }).si_then([ctx, pin_end, &offset, &bl, &to_write](
+ auto p) {
auto &[right_extent, tailptr] = p;
if (tailptr) {
bl.append(*tailptr);
ceph_assert((right_extent->addr + right_extent->len) == pin_end);
to_write.push_back(std::move(*right_extent));
}
- return write_ertr::now();
- }).safe_then([ctx, &pins] {
+ return write_iertr::now();
+ }).si_then([ctx, &pins] {
return do_removals(ctx, pins);
- }).safe_then([ctx, &to_write] {
+ }).si_then([ctx, &to_write] {
return do_insertions(ctx, to_write);
});
});
ctx,
object_data,
p2roundup(offset + bl.length(), ctx.tm.get_block_size())
- ).safe_then([this, ctx, offset, &object_data, &bl] {
+ ).si_then([this, ctx, offset, &object_data, &bl] {
auto logical_offset = object_data.get_reserved_data_base() + offset;
return ctx.tm.get_pins(
ctx.t,
logical_offset,
bl.length()
- ).safe_then([this, ctx,logical_offset, &bl](
- auto pins) {
+ ).si_then([this, ctx,logical_offset, &bl](
+ auto pins) {
return overwrite(ctx, logical_offset, bufferlist(bl), std::move(pins));
});
});
ctx.t,
loffset,
len
- ).safe_then([ctx, loffset, len, &ret](auto _pins) {
+ ).si_then([ctx, loffset, len, &ret](auto _pins) {
// offset~len falls within reserved region and len > 0
ceph_assert(_pins.size() >= 1);
ceph_assert((*_pins.begin())->get_laddr() <= loffset);
std::move(_pins),
loffset,
[ctx, loffset, len, &ret](auto &pins, auto ¤t) {
- return crimson::do_for_each(
- std::begin(pins),
- std::end(pins),
+ return trans_intr::do_for_each(
+ pins,
[ctx, loffset, len, ¤t, &ret](auto &pin)
- -> read_ertr::future<> {
+ -> read_iertr::future<> {
ceph_assert(current <= (loffset + len));
ceph_assert(
(loffset + len) > pin->get_laddr());
return ctx.tm.pin_to_extent<ObjectDataBlock>(
ctx.t,
std::move(pin)
- ).safe_then([&ret, ¤t, end](auto extent) {
+ ).si_then([&ret, ¤t, end](auto extent) {
ceph_assert(
(extent->get_laddr() + extent->get_length()) >= end);
ceph_assert(end > current);
end - current));
current = end;
return seastar::now();
- }).handle_error(
- read_ertr::pass_further{},
+ }).handle_error_interruptible(
+ read_iertr::pass_further{},
crimson::ct_error::assert_all{
"ObjectDataHandler::read hit invalid error"
}
});
});
});
- }).safe_then([&ret] {
+ }).si_then([&ret] {
return std::move(ret);
});
});
object_data,
offset);
} else {
- return truncate_ertr::now();
+ return truncate_iertr::now();
}
});
}