if (!i->is_valid()) {
continue;
}
+ DEBUGT("was mutating extent: {}", t, *i);
efforts.mutate.increment(i->get_length());
efforts.mutate_delta_bytes += i->get_delta().length();
}
// Should be valid due to interruptible future
for (auto &i: t.read_set) {
- assert(i.ref->is_valid());
+ if (!i.ref->is_valid()) {
+ DEBUGT("read_set invalid extent: {}, aborting", t, *i.ref);
+ ceph_abort("no invalid extent allowed in transactions' read_set");
+ }
get_by_ext(efforts.read_by_ext,
i.ref->get_type()).increment(i.ref->get_length());
}
if (split_from > 1) {
auto &pos = iter.get_internal(split_from);
- DEBUGT("splitting internal {} at depth {}", c.trans, *pos.node, split_from);
+ DEBUGT("splitting internal {} at depth {}, parent: {} at pos: {}",
+ c.trans,
+ *pos.node,
+ split_from,
+ *parent_pos.node,
+ parent_pos.pos);
auto [left, right] = split_level(parent_pos, pos);
if (pos.pos < left->get_size()) {
}
} else {
auto &pos = iter.leaf;
- DEBUGT("splitting leaf {}", c.trans, *pos.node);
+ DEBUGT("splitting leaf {}, parent: {} at pos: {}",
+ c.trans,
+ *pos.node,
+ *parent_pos.node,
+ parent_pos.pos);
auto [left, right] = split_level(parent_pos, pos);
/* right->get_node_meta().begin == pivot == right->begin()->get_key()
auto is_left = (iter + 1) == iter_end();
auto donor_iter = is_left ? iter - 1 : iter + 1;
return omap_load_extent(oc, donor_iter->get_val(), get_meta().depth - 1)
- .si_then([=] (auto &&donor) mutable {
+ .si_then([=, px=this] (auto &&donor) mutable {
auto [l, r] = is_left ?
std::make_pair(donor, entry) : std::make_pair(entry, donor);
auto [liter, riter] = is_left ?
logger().debug("{}::merge_entry make_full_merge l {} r {}", __func__, *l, *r);
assert(entry->extent_is_below_min());
return l->make_full_merge(oc, r).si_then([liter=liter, riter=riter,
- l=l, r=r, oc, this] (auto &&replacement){
+ l=l, r=r, oc, this, px] (auto &&replacement){
+ logger().debug("OMapInnerNode::merge_entry to update parent: {}", *px);
journal_inner_update(liter, replacement->get_laddr(), maybe_get_delta_buffer());
journal_inner_remove(riter, maybe_get_delta_buffer());
//retire extent
} else {
logger().debug("{}::merge_entry balanced l {} r {}", __func__, *l, *r);
return l->make_balanced(oc, r).si_then([liter=liter, riter=riter,
- l=l, r=r, oc, this] (auto tuple) {
+ l=l, r=r, oc, this, px] (auto tuple) {
+ logger().debug("OMapInnerNode::merge_entry to update parent: {}", *px);
auto [replacement_l, replacement_r, replacement_pivot] = tuple;
//update operation will not cuase node overflow, so we can do it first
journal_inner_update(liter, replacement_l->get_laddr(), maybe_get_delta_buffer());
hint,
len,
ext->get_paddr()
- ).si_then([ext=std::move(ext), len, this](auto &&ref) mutable {
+ ).si_then([ext=std::move(ext), len, hint, &t, this](auto &&ref) mutable {
+ LOG_PREFIX(TransactionManager::alloc_extent);
ext->set_pin(std::move(ref));
stats.extents_allocated_total++;
stats.extents_allocated_bytes += len;
+ DEBUGT("new extent: {}, hint: {}", t, *ext, hint);
return alloc_extent_iertr::make_ready_future<TCachedExtentRef<T>>(
std::move(ext));
});