Skip to content

Commit 3689565

Browse files
authored
Merge pull request ceph#62425 from cyx1231st/wip-seastore-cleanups
crimson/os/seastore: misc cleanups Reviewed-by: Xuehan Xu <[email protected]> Reviewed-by: Matan Breizman <[email protected]>
2 parents d818d46 + 45f62dd commit 3689565

File tree

14 files changed

+125
-290
lines changed

14 files changed

+125
-290
lines changed

src/crimson/os/seastore/btree/btree_range_pin.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ class BtreeNodeMapping : public PhysicalNodeMapping<key_t, val_t> {
182182
assert(extent.is_pending_in_trans(t.get_trans_id()));
183183
return false;
184184
}
185-
auto &pendings = extent.mutation_pendings;
185+
auto &pendings = extent.mutation_pending_extents;
186186
auto trans_id = t.get_trans_id();
187187
bool unviewable = (pendings.find(trans_id, trans_spec_view_t::cmp_t()) !=
188188
pendings.end());

src/crimson/os/seastore/cache.cc

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
6262
auto result = t.get_extent(addr, &ext);
6363
if (result == Transaction::get_extent_ret::PRESENT) {
6464
DEBUGT("retire {}~0x{:x} on t -- {}", t, addr, length, *ext);
65-
t.add_to_retired_set(CachedExtentRef(&*ext));
65+
t.add_present_to_retired_set(CachedExtentRef(&*ext));
6666
return retire_extent_iertr::now();
6767
} else if (result == Transaction::get_extent_ret::RETIRED) {
6868
ERRORT("retire {}~0x{:x} failed, already retired -- {}", t, addr, length, *ext);
@@ -90,8 +90,7 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
9090
t, addr, length, *ext);
9191
add_extent(ext);
9292
}
93-
t.add_to_read_set(ext);
94-
t.add_to_retired_set(ext);
93+
t.add_absent_to_retired_set(ext);
9594
return retire_extent_iertr::now();
9695
}
9796

@@ -117,8 +116,7 @@ void Cache::retire_absent_extent_addr(
117116
DEBUGT("retire {}~0x{:x} as placeholder, add extent -- {}",
118117
t, addr, length, *ext);
119118
add_extent(ext);
120-
t.add_to_read_set(ext);
121-
t.add_to_retired_set(ext);
119+
t.add_absent_to_retired_set(ext);
122120
}
123121

124122
void Cache::dump_contents()
@@ -919,14 +917,14 @@ void Cache::invalidate_extent(
919917
CachedExtent& extent)
920918
{
921919
if (!extent.may_conflict()) {
922-
assert(extent.transactions.empty());
920+
assert(extent.read_transactions.empty());
923921
extent.set_invalid(t);
924922
return;
925923
}
926924

927925
LOG_PREFIX(Cache::invalidate_extent);
928926
bool do_conflict_log = true;
929-
for (auto &&i: extent.transactions) {
927+
for (auto &&i: extent.read_transactions) {
930928
if (!i.t->conflicted) {
931929
if (do_conflict_log) {
932930
SUBDEBUGT(seastore_t, "conflict begin -- {}", t, extent);
@@ -1155,10 +1153,13 @@ CachedExtentRef Cache::duplicate_for_write(
11551153
LOG_PREFIX(Cache::duplicate_for_write);
11561154
assert(i->is_fully_loaded());
11571155

1158-
if (i->is_mutable())
1156+
if (i->is_mutable()) {
11591157
return i;
1158+
}
11601159

11611160
if (i->is_exist_clean()) {
1161+
assert(i->is_logical());
1162+
assert(static_cast<LogicalCachedExtent&>(*i).has_laddr());
11621163
i->version++;
11631164
i->state = CachedExtent::extent_state_t::EXIST_MUTATION_PENDING;
11641165
i->last_committed_crc = i->calc_crc32c();
@@ -1178,7 +1179,7 @@ CachedExtentRef Cache::duplicate_for_write(
11781179
ret->prior_instance = i;
11791180
// duplicate_for_write won't occur after ool write finished
11801181
assert(!i->prior_poffset);
1181-
auto [iter, inserted] = i->mutation_pendings.insert(*ret);
1182+
auto [iter, inserted] = i->mutation_pending_extents.insert(*ret);
11821183
ceph_assert(inserted);
11831184
t.add_mutated_extent(ret);
11841185
if (is_root_type(ret->get_type())) {
@@ -1189,6 +1190,12 @@ CachedExtentRef Cache::duplicate_for_write(
11891190

11901191
ret->version++;
11911192
ret->state = CachedExtent::extent_state_t::MUTATION_PENDING;
1193+
if (i->is_logical()) {
1194+
auto& lextent = static_cast<LogicalCachedExtent&>(*i);
1195+
assert(lextent.has_laddr());
1196+
assert(ret->is_logical());
1197+
static_cast<LogicalCachedExtent&>(*ret).set_laddr(lextent.get_laddr());
1198+
}
11921199
DEBUGT("{} -> {}", t, *i, *ret);
11931200
return ret;
11941201
}

src/crimson/os/seastore/cache.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ class Cache : public ExtentTransViewRetriever {
153153
void retire_extent(Transaction &t, CachedExtentRef ref) {
154154
LOG_PREFIX(Cache::retire_extent);
155155
SUBDEBUGT(seastore_cache, "retire extent -- {}", t, *ref);
156-
t.add_to_retired_set(ref);
156+
t.add_present_to_retired_set(ref);
157157
}
158158

159159
/// Declare paddr retired in t
@@ -665,9 +665,10 @@ class Cache : public ExtentTransViewRetriever {
665665
"{} {}~0x{:x} is absent, add extent and reading range 0x{:x}~0x{:x} ... -- {}",
666666
T::TYPE, offset, length, partial_off, partial_len, *ret);
667667
add_extent(ret);
668-
// touch_extent() should be included in on_cache
669-
on_cache(*ret);
670668
extent_init_func(*ret);
669+
// touch_extent() should be included in on_cache,
670+
// required by add_extent()
671+
on_cache(*ret);
671672
return read_extent<T>(
672673
std::move(ret), partial_off, partial_len, p_src);
673674
}
@@ -685,16 +686,16 @@ class Cache : public ExtentTransViewRetriever {
685686
"{} {}~0x{:x} is absent(placeholder), add extent and reading range 0x{:x}~0x{:x} ... -- {}",
686687
T::TYPE, offset, length, partial_off, partial_len, *ret);
687688
extents_index.replace(*ret, *cached);
688-
on_cache(*ret);
689689

690690
// replace placeholder in transactions
691-
while (!cached->transactions.empty()) {
692-
auto t = cached->transactions.begin()->t;
691+
while (!cached->read_transactions.empty()) {
692+
auto t = cached->read_transactions.begin()->t;
693693
t->replace_placeholder(*cached, *ret);
694694
}
695695

696696
cached->state = CachedExtent::extent_state_t::INVALID;
697697
extent_init_func(*ret);
698+
on_cache(*ret);
698699
return read_extent<T>(
699700
std::move(ret), partial_off, partial_len, p_src);
700701
}

src/crimson/os/seastore/cached_extent.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ CachedExtent* CachedExtent::get_transactional_view(Transaction &t) {
8181
}
8282

8383
CachedExtent* CachedExtent::get_transactional_view(transaction_id_t tid) {
84-
auto it = mutation_pendings.find(tid, trans_spec_view_t::cmp_t());
85-
if (it != mutation_pendings.end()) {
84+
auto it = mutation_pending_extents.find(tid, trans_spec_view_t::cmp_t());
85+
if (it != mutation_pending_extents.end()) {
8686
return (CachedExtent*)&(*it);
8787
} else {
8888
return this;

src/crimson/os/seastore/cached_extent.h

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class read_set_item_t {
7474
&read_set_item_t::trans_hook>;
7575

7676
public:
77-
struct cmp_t {
77+
struct extent_cmp_t {
7878
using is_transparent = paddr_t;
7979
bool operator()(const read_set_item_t<T> &lhs, const read_set_item_t &rhs) const;
8080
bool operator()(const paddr_t &lhs, const read_set_item_t<T> &rhs) const;
@@ -113,10 +113,14 @@ class read_set_item_t {
113113
read_set_item_t(read_set_item_t &&) = default;
114114
~read_set_item_t() = default;
115115
};
116+
116117
template <typename T>
117-
using read_set_t = std::set<
118+
using read_extent_set_t = std::set<
118119
read_set_item_t<T>,
119-
typename read_set_item_t<T>::cmp_t>;
120+
typename read_set_item_t<T>::extent_cmp_t>;
121+
122+
template <typename T>
123+
using read_trans_set_t = typename read_set_item_t<T>::trans_set_t;
120124

121125
struct trans_spec_view_t {
122126
// if the extent is pending, contains the id of the owning transaction;
@@ -403,6 +407,8 @@ class CachedExtent
403407
virtual extent_types_t get_type() const = 0;
404408

405409
virtual bool is_logical() const {
410+
assert(!is_logical_type(get_type()));
411+
assert(is_physical_type(get_type()));
406412
return false;
407413
}
408414

@@ -872,7 +878,7 @@ class CachedExtent
872878
CachedExtent* get_transactional_view(Transaction &t);
873879
CachedExtent* get_transactional_view(transaction_id_t tid);
874880

875-
read_set_item_t<Transaction>::trans_set_t transactions;
881+
read_trans_set_t<Transaction> read_transactions;
876882

877883
placement_hint_t user_hint = PLACEMENT_HINT_NULL;
878884

@@ -881,7 +887,7 @@ class CachedExtent
881887
rewrite_gen_t rewrite_generation = NULL_GENERATION;
882888

883889
protected:
884-
trans_view_set_t mutation_pendings;
890+
trans_view_set_t mutation_pending_extents;
885891
trans_view_set_t retired_transactions;
886892

887893
CachedExtent(CachedExtent &&other) = delete;
@@ -1167,7 +1173,7 @@ template <typename T, typename C, typename Cmp>
11671173
class addr_extent_set_base_t
11681174
: public std::set<C, Cmp> {};
11691175

1170-
using pextent_set_t = addr_extent_set_base_t<
1176+
using retired_extent_set_t = addr_extent_set_base_t<
11711177
paddr_t,
11721178
trans_retired_extent_link_t,
11731179
ref_paddr_cmp
@@ -1349,10 +1355,6 @@ class RetiredExtentPlaceholder : public CachedExtent {
13491355
ceph_assert(0 == "Should never happen for a placeholder");
13501356
}
13511357

1352-
bool is_logical() const final {
1353-
return false;
1354-
}
1355-
13561358
void on_rewrite(Transaction &, CachedExtent&, extent_len_t) final {}
13571359

13581360
std::ostream &print_detail(std::ostream &out) const final {
@@ -1406,6 +1408,8 @@ class LogicalCachedExtent : public CachedExtent {
14061408
}
14071409

14081410
bool is_logical() const final {
1411+
assert(is_logical_type(get_type()));
1412+
assert(!is_physical_type(get_type()));
14091413
return true;
14101414
}
14111415

@@ -1468,17 +1472,17 @@ read_set_item_t<T>::read_set_item_t(T *t, CachedExtentRef ref)
14681472
{}
14691473

14701474
template <typename T>
1471-
inline bool read_set_item_t<T>::cmp_t::operator()(
1475+
inline bool read_set_item_t<T>::extent_cmp_t::operator()(
14721476
const read_set_item_t<T> &lhs, const read_set_item_t<T> &rhs) const {
14731477
return lhs.ref->poffset < rhs.ref->poffset;
14741478
}
14751479
template <typename T>
1476-
inline bool read_set_item_t<T>::cmp_t::operator()(
1480+
inline bool read_set_item_t<T>::extent_cmp_t::operator()(
14771481
const paddr_t &lhs, const read_set_item_t<T> &rhs) const {
14781482
return lhs < rhs.ref->poffset;
14791483
}
14801484
template <typename T>
1481-
inline bool read_set_item_t<T>::cmp_t::operator()(
1485+
inline bool read_set_item_t<T>::extent_cmp_t::operator()(
14821486
const read_set_item_t<T> &lhs, const paddr_t &rhs) const {
14831487
return lhs.ref->poffset < rhs;
14841488
}

src/crimson/os/seastore/lba_manager.h

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,6 @@ class LBAManager {
5050
Transaction &t,
5151
laddr_t offset, extent_len_t length) = 0;
5252

53-
/**
54-
* Fetches mappings for a list of laddr_t in range [offset, offset + len)
55-
*
56-
* Future will not resolve until all pins have resolved (set_paddr called)
57-
* For indirect lba mappings, get_mappings will always retrieve the original
58-
* lba value.
59-
*/
60-
virtual get_mappings_ret get_mappings(
61-
Transaction &t,
62-
laddr_list_t &&extent_lisk) = 0;
63-
6453
/**
6554
* Fetches the mapping for laddr_t
6655
*
@@ -120,20 +109,11 @@ class LBAManager {
120109
using ref_ret = ref_iertr::future<ref_update_result_t>;
121110

122111
/**
123-
* Decrements ref count on extent
124-
*
125-
* @return returns resulting refcount
126-
*/
127-
virtual ref_ret decref_extent(
128-
Transaction &t,
129-
laddr_t addr) = 0;
130-
131-
/**
132-
* Increments ref count on extent
112+
* Removes a mapping and deal with indirection
133113
*
134114
* @return returns resulting refcount
135115
*/
136-
virtual ref_ret incref_extent(
116+
virtual ref_ret remove_mapping(
137117
Transaction &t,
138118
laddr_t addr) = 0;
139119

src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -242,31 +242,6 @@ BtreeLBAManager::_get_original_mappings(
242242
});
243243
}
244244

245-
246-
BtreeLBAManager::get_mappings_ret
247-
BtreeLBAManager::get_mappings(
248-
Transaction &t,
249-
laddr_list_t &&list)
250-
{
251-
LOG_PREFIX(BtreeLBAManager::get_mappings);
252-
TRACET("{}", t, list);
253-
auto l = std::make_unique<laddr_list_t>(std::move(list));
254-
auto retptr = std::make_unique<lba_pin_list_t>();
255-
auto &ret = *retptr;
256-
return trans_intr::do_for_each(
257-
l->begin(),
258-
l->end(),
259-
[this, &t, &ret](const auto &p) {
260-
return this->get_mappings(t, p.first, p.second).si_then(
261-
[&ret](auto res) {
262-
ret.splice(ret.end(), res, res.begin(), res.end());
263-
return get_mappings_iertr::now();
264-
});
265-
}).si_then([l=std::move(l), retptr=std::move(retptr)]() mutable {
266-
return std::move(*retptr);
267-
});
268-
}
269-
270245
BtreeLBAManager::get_mapping_ret
271246
BtreeLBAManager::get_mapping(
272247
Transaction &t,

src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -269,15 +269,10 @@ class BtreeLBAManager : public LBAManager {
269269
Transaction &t,
270270
laddr_t offset, extent_len_t length) final;
271271

272-
get_mappings_ret get_mappings(
273-
Transaction &t,
274-
laddr_list_t &&list) final;
275-
276272
get_mapping_ret get_mapping(
277273
Transaction &t,
278274
laddr_t offset) final;
279275

280-
281276
struct alloc_mapping_info_t {
282277
laddr_t key = L_ADDR_NULL; // once assigned, the allocation to
283278
// key must be exact and successful
@@ -430,7 +425,7 @@ class BtreeLBAManager : public LBAManager {
430425
});
431426
}
432427

433-
ref_ret decref_extent(
428+
ref_ret remove_mapping(
434429
Transaction &t,
435430
laddr_t addr) final {
436431
return update_refcount(t, addr, -1, true
@@ -439,15 +434,6 @@ class BtreeLBAManager : public LBAManager {
439434
});
440435
}
441436

442-
ref_ret incref_extent(
443-
Transaction &t,
444-
laddr_t addr) final {
445-
return update_refcount(t, addr, 1, false
446-
).si_then([](auto res) {
447-
return std::move(res.ref_update_res);
448-
});
449-
}
450-
451437
remap_ret remap_mappings(
452438
Transaction &t,
453439
LBAMappingRef orig_mapping,

src/crimson/os/seastore/linked_tree_node.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,9 @@ class ParentNode {
302302
TCachedExtentRef<T> find_pending_version(Transaction &t, node_key_t key) {
303303
auto &me = down_cast();
304304
assert(me.is_stable());
305-
auto mut_iter = me.mutation_pendings.find(
305+
auto mut_iter = me.mutation_pending_extents.find(
306306
t.get_trans_id(), trans_spec_view_t::cmp_t());
307-
if (mut_iter != me.mutation_pendings.end()) {
307+
if (mut_iter != me.mutation_pending_extents.end()) {
308308
assert(copy_dests_by_trans.find(t.get_trans_id()) ==
309309
copy_dests_by_trans.end());
310310
return static_cast<T*>(&(*mut_iter));

0 commit comments

Comments
 (0)