assert(extent.is_pending_in_trans(t.get_trans_id()));
return false;
}
- auto &pendings = extent.mutation_pendings;
+ auto &pendings = extent.mutation_pending_extents;
auto trans_id = t.get_trans_id();
bool unviewable = (pendings.find(trans_id, trans_spec_view_t::cmp_t()) !=
pendings.end());
CachedExtent& extent)
{
if (!extent.may_conflict()) {
- assert(extent.transactions.empty());
+ assert(extent.read_transactions.empty());
extent.set_invalid(t);
return;
}
LOG_PREFIX(Cache::invalidate_extent);
bool do_conflict_log = true;
- for (auto &&i: extent.transactions) {
+ for (auto &&i: extent.read_transactions) {
if (!i.t->conflicted) {
if (do_conflict_log) {
SUBDEBUGT(seastore_t, "conflict begin -- {}", t, extent);
ret->prior_instance = i;
// duplicate_for_write won't occur after ool write finished
assert(!i->prior_poffset);
- auto [iter, inserted] = i->mutation_pendings.insert(*ret);
+ auto [iter, inserted] = i->mutation_pending_extents.insert(*ret);
ceph_assert(inserted);
t.add_mutated_extent(ret);
if (is_root_type(ret->get_type())) {
on_cache(*ret);
// replace placeholder in transactions
- while (!cached->transactions.empty()) {
- auto t = cached->transactions.begin()->t;
+ while (!cached->read_transactions.empty()) {
+ auto t = cached->read_transactions.begin()->t;
t->replace_placeholder(*cached, *ret);
}
}
CachedExtent* CachedExtent::get_transactional_view(transaction_id_t tid) {
- auto it = mutation_pendings.find(tid, trans_spec_view_t::cmp_t());
- if (it != mutation_pendings.end()) {
+ auto it = mutation_pending_extents.find(tid, trans_spec_view_t::cmp_t());
+ if (it != mutation_pending_extents.end()) {
return (CachedExtent*)&(*it);
} else {
return this;
&read_set_item_t::trans_hook>;
public:
- struct cmp_t {
+ struct extent_cmp_t {
using is_transparent = paddr_t;
bool operator()(const read_set_item_t<T> &lhs, const read_set_item_t &rhs) const;
bool operator()(const paddr_t &lhs, const read_set_item_t<T> &rhs) const;
read_set_item_t(read_set_item_t &&) = default;
~read_set_item_t() = default;
};
+
template <typename T>
-using read_set_t = std::set<
+using read_extent_set_t = std::set<
read_set_item_t<T>,
- typename read_set_item_t<T>::cmp_t>;
+ typename read_set_item_t<T>::extent_cmp_t>;
+
+template <typename T>
+using read_trans_set_t = typename read_set_item_t<T>::trans_set_t;
struct trans_spec_view_t {
// if the extent is pending, contains the id of the owning transaction;
CachedExtent* get_transactional_view(Transaction &t);
CachedExtent* get_transactional_view(transaction_id_t tid);
- read_set_item_t<Transaction>::trans_set_t transactions;
+ read_trans_set_t<Transaction> read_transactions;
placement_hint_t user_hint = PLACEMENT_HINT_NULL;
rewrite_gen_t rewrite_generation = NULL_GENERATION;
protected:
- trans_view_set_t mutation_pendings;
+ trans_view_set_t mutation_pending_extents;
trans_view_set_t retired_transactions;
CachedExtent(CachedExtent &&other) = delete;
class addr_extent_set_base_t
: public std::set<C, Cmp> {};
-using pextent_set_t = addr_extent_set_base_t<
+using retired_extent_set_t = addr_extent_set_base_t<
paddr_t,
trans_retired_extent_link_t,
ref_paddr_cmp
{}
template <typename T>
-inline bool read_set_item_t<T>::cmp_t::operator()(
+inline bool read_set_item_t<T>::extent_cmp_t::operator()(
const read_set_item_t<T> &lhs, const read_set_item_t<T> &rhs) const {
return lhs.ref->poffset < rhs.ref->poffset;
}
template <typename T>
-inline bool read_set_item_t<T>::cmp_t::operator()(
+inline bool read_set_item_t<T>::extent_cmp_t::operator()(
const paddr_t &lhs, const read_set_item_t<T> &rhs) const {
return lhs < rhs.ref->poffset;
}
template <typename T>
-inline bool read_set_item_t<T>::cmp_t::operator()(
+inline bool read_set_item_t<T>::extent_cmp_t::operator()(
const read_set_item_t<T> &lhs, const paddr_t &rhs) const {
return lhs.ref->poffset < rhs;
}
TCachedExtentRef<T> find_pending_version(Transaction &t, node_key_t key) {
auto &me = down_cast();
assert(me.is_stable());
- auto mut_iter = me.mutation_pendings.find(
+ auto mut_iter = me.mutation_pending_extents.find(
t.get_trans_id(), trans_spec_view_t::cmp_t());
- if (mut_iter != me.mutation_pendings.end()) {
+ if (mut_iter != me.mutation_pending_extents.end()) {
assert(copy_dests_by_trans.find(t.get_trans_id()) ==
copy_dests_by_trans.end());
return static_cast<T*>(&(*mut_iter));
assert(ref->is_valid());
- auto it = ref->transactions.lower_bound(
+ auto it = ref->read_transactions.lower_bound(
this, read_set_item_t<Transaction>::trans_cmp_t());
- if (it != ref->transactions.end() && it->t == this) {
+ if (it != ref->read_transactions.end() && it->t == this) {
return false;
}
auto [iter, inserted] = read_set.emplace(this, ref);
ceph_assert(inserted);
- ref->transactions.insert_before(
+ ref->read_transactions.insert_before(
it, const_cast<read_set_item_t<Transaction>&>(*iter));
return true;
}
assert(ref->is_valid());
- auto it = ref->transactions.lower_bound(
+ auto it = ref->read_transactions.lower_bound(
this, read_set_item_t<Transaction>::trans_cmp_t());
- assert(it == ref->transactions.end() || it->t != this);
+ assert(it == ref->read_transactions.end() || it->t != this);
auto [iter, inserted] = read_set.emplace(this, ref);
ceph_assert(inserted);
- ref->transactions.insert_before(
+ ref->read_transactions.insert_before(
it, const_cast<read_set_item_t<Transaction>&>(*iter));
}
assert(where->ref.get() == &placeholder);
where = read_set.erase(where);
auto it = read_set.emplace_hint(where, this, &extent);
- extent.transactions.insert(const_cast<read_set_item_t<Transaction>&>(*it));
+ extent.read_transactions.insert(const_cast<read_set_item_t<Transaction>&>(*it));
}
{
auto where = retired_set.find(&placeholder);
* Submitting a transaction mutating any contained extent/addr will
* invalidate *this.
*/
- read_set_t<Transaction> read_set; ///< set of extents read by paddr
+ read_extent_set_t<Transaction> read_set; ///< set of extents read by paddr
uint64_t fresh_backref_extents = 0; // counter of new backref extents
*
* Set of extents retired by *this.
*/
- pextent_set_t retired_set;
+ retired_extent_set_t retired_set;
/// stats to collect when commit or invalidate
tree_stats_t onode_tree_stats;