if (it != merged.end()) {
TRACE("{} -> {}, {} -> {}",
me, mextent, (pladdr_t)buf.val.pladdr, it->second);
- buf.val.pladdr = pladdr_le_t(it->second);
+ buf.val = lba::lba_map_val_le_t(it->second);
}
}
});
+ // "me" is the actual prev of mextent, so before mextent enters
+ // the "prepare" pipeline phase, its last_committed_crc should be
+ // that of "me"'s
+ mextent.set_last_committed_crc(me.get_last_committed_crc());
} else {
auto &mextent = static_cast<CachedExtent&>(mext);
TRACE("{} -> {}", extent, mextent);
0, extent.get_length(), mextent.get_bptr().c_str());
mextent.on_data_commit();
mextent.reapply_delta();
+ mextent.set_last_committed_crc(extent.get_last_committed_crc());
}
}
}
t, iter.get_key(), new_val.shadow_paddr, paddr);
assert(extent->is_pending());
assert(!extent->has_parent_tracker());
- iter = co_await btree.update(c, iter, new_val, extent);
+ iter = btree.update(c, iter, new_val, extent);
assert(extent->has_parent_tracker());
} else {
auto insert_iter = co_await btree.remove(c, std::move(iter));
laddr_t pivot,
lba_map_val_t val) {
LOG_PREFIX(FixedKVInternalNode::replace);
+ assert(this->t != nullptr);
SUBTRACE(seastore_fixedkv_tree, "trans.{}, pos {}, old key {}, key {}",
- this->pending_for_transaction,
+ this->t->get_trans_id(),
iter.get_offset(),
iter.get_key(),
pivot);
std::ostream &print_detail(std::ostream &out) const final;
- std::map<laddr_t, pladdr_t> merge_content_to(
+ std::map<laddr_t, lba_map_val_t> merge_content_to(
Transaction &t,
LBALeafNode &pending_version,
iterator &iter)
{
LOG_PREFIX(LBALeafNode::merge_content_to);
SUBTRACET(seastore_lba, "merging with {}", t, pending_version);
- std::map<laddr_t, pladdr_t> modified;
+ std::map<laddr_t, lba_map_val_t> modified;
auto it = pending_version.begin();
while (it != pending_version.end() && iter != this->end()) {
const auto &v1 = iter->get_val();
m_v2.checksum = v1.checksum;
}
it->set_val(m_v2);
- auto [_it, inserted] = modified.emplace(it->get_key(), paddr);
+ auto [_it, inserted] = modified.emplace(it->get_key(), m_v2);
ceph_assert(inserted);
}
it++;
}
);
}
-
}
}
SUBTRACET(seastore_tm, "retire extent...", t);
assert(extent->is_seen_by_users());
cache->retire_extent(t, extent);
+ if (pin.has_shadow_val()) {
+ if (auto shadow = extent->get_shadow()) {
+ t.add_absent_to_retired_set(shadow);
+ } else {
+ auto laddr = pin.get_key();
+ cache->retire_absent_extent_addr_by_type(
+ t, laddr, pin.get_shadow_val(),
+ original_len, pin.get_extent_type(),
+ [laddr, extent](auto &ext) {
+ auto lextent = ext.template cast<LogicalChildNode>();
+ assert(ext.is_logical());
+ assert(!lextent->has_laddr());
+ assert(!ext.has_been_invalidated());
+ lextent->set_laddr(laddr);
+ extent->set_shadow(lextent);
+ }
+ );
+ }
+ }
}
for (auto &remap : remaps) {
auto remap_offset = remap.offset;