Skip to content

Commit 785f3ec

Browse files
authored
Merge pull request ceph#47749 from xxhdx1985126/wip-intra-fixedkvbtree-pointers-2
crimson/os/seastore/btree: link fixedkvbtree's nodes and logical extents with forward and backward pointers, and drop the pin_set Reviewed-by: Yingxin Cheng <[email protected]> Reviewed-by: Samuel Just <[email protected]>
2 parents 1fd8e52 + 33b56a0 commit 785f3ec

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2865
-1217
lines changed

src/crimson/os/seastore/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ set(crimson_seastore_srcs
77
transaction_manager.cc
88
transaction.cc
99
cache.cc
10+
root_block.cc
1011
lba_manager.cc
1112
async_cleaner.cc
1213
backref_manager.cc
@@ -17,6 +18,8 @@ set(crimson_seastore_srcs
1718
omap_manager.cc
1819
omap_manager/btree/btree_omap_manager.cc
1920
omap_manager/btree/omap_btree_node_impl.cc
21+
btree/btree_range_pin.cc
22+
btree/fixed_kv_node.cc
2023
onode.cc
2124
onode_manager/staged-fltree/node.cc
2225
onode_manager/staged-fltree/node_extent_manager.cc

src/crimson/os/seastore/async_cleaner.cc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1424,23 +1424,27 @@ bool SegmentCleaner::check_usage()
14241424
t,
14251425
[&tracker](
14261426
paddr_t paddr,
1427+
paddr_t backref_key,
14271428
extent_len_t len,
14281429
extent_types_t type,
14291430
laddr_t laddr)
14301431
{
14311432
if (paddr.get_addr_type() == paddr_types_t::SEGMENT) {
14321433
if (is_backref_node(type)) {
1433-
assert(laddr == L_ADDR_NULL);
1434+
assert(laddr == L_ADDR_NULL);
1435+
assert(backref_key != P_ADDR_NULL);
14341436
tracker->allocate(
14351437
paddr.as_seg_paddr().get_segment_id(),
14361438
paddr.as_seg_paddr().get_segment_off(),
14371439
len);
14381440
} else if (laddr == L_ADDR_NULL) {
1441+
assert(backref_key == P_ADDR_NULL);
14391442
tracker->release(
14401443
paddr.as_seg_paddr().get_segment_id(),
14411444
paddr.as_seg_paddr().get_segment_off(),
14421445
len);
14431446
} else {
1447+
assert(backref_key == P_ADDR_NULL);
14441448
tracker->allocate(
14451449
paddr.as_seg_paddr().get_segment_id(),
14461450
paddr.as_seg_paddr().get_segment_off(),
@@ -1724,6 +1728,7 @@ bool RBMCleaner::check_usage()
17241728
t,
17251729
[&tracker, &rbms](
17261730
paddr_t paddr,
1731+
paddr_t backref_key,
17271732
extent_len_t len,
17281733
extent_types_t type,
17291734
laddr_t laddr)
@@ -1732,14 +1737,17 @@ bool RBMCleaner::check_usage()
17321737
if (rbm->get_device_id() == paddr.get_device_id()) {
17331738
if (is_backref_node(type)) {
17341739
assert(laddr == L_ADDR_NULL);
1740+
assert(backref_key != P_ADDR_NULL);
17351741
tracker.allocate(
17361742
paddr,
17371743
len);
17381744
} else if (laddr == L_ADDR_NULL) {
1745+
assert(backref_key == P_ADDR_NULL);
17391746
tracker.release(
17401747
paddr,
17411748
len);
17421749
} else {
1750+
assert(backref_key == P_ADDR_NULL);
17431751
tracker.allocate(
17441752
paddr,
17451753
len);

src/crimson/os/seastore/backref/backref_tree_node.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ class BackrefLeafNode
7676
paddr_t, paddr_le_t,
7777
backref_map_val_t, backref_map_val_le_t,
7878
BACKREF_NODE_SIZE,
79-
BackrefLeafNode> {
79+
BackrefLeafNode,
80+
false> {
8081
public:
8182
template <typename... T>
8283
BackrefLeafNode(T&&... t) :
@@ -91,7 +92,8 @@ class BackrefLeafNode
9192
const_iterator insert(
9293
const_iterator iter,
9394
paddr_t key,
94-
backref_map_val_t val) final {
95+
backref_map_val_t val,
96+
LogicalCachedExtent*) final {
9597
journal_insert(
9698
iter,
9799
key,
@@ -102,7 +104,8 @@ class BackrefLeafNode
102104

103105
void update(
104106
const_iterator iter,
105-
backref_map_val_t val) final {
107+
backref_map_val_t val,
108+
LogicalCachedExtent*) final {
106109
return journal_update(
107110
iter,
108111
val,
@@ -130,4 +133,5 @@ using BackrefLeafNodeRef = BackrefLeafNode::Ref;
130133
template <> struct fmt::formatter<crimson::os::seastore::backref::backref_map_val_t> : fmt::ostream_formatter {};
131134
template <> struct fmt::formatter<crimson::os::seastore::backref::BackrefInternalNode> : fmt::ostream_formatter {};
132135
template <> struct fmt::formatter<crimson::os::seastore::backref::BackrefLeafNode> : fmt::ostream_formatter {};
136+
template <> struct fmt::formatter<crimson::os::seastore::backref::backref_node_meta_t> : fmt::ostream_formatter {};
133137
#endif

0 commit comments

Comments
 (0)