Skip to content

Commit 3ad8fdc

Browse files
authored
Merge pull request ceph#61347 from xxhdx1985126/wip-seastore-tree-pointer-abstract
crimson/os/seastore: refactor fixed-kv-btree Reviewed-by: Yingxin Cheng <[email protected]>
2 parents 4dac2db + 90101c7 commit 3ad8fdc

31 files changed

+1765
-1392
lines changed

src/crimson/os/seastore/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
set(crimson_seastore_srcs
22
cached_extent.cc
33
lba_mapping.cc
4+
logical_child_node.cc
45
seastore_types.cc
56
segment_manager.cc
67
segment_manager/ephemeral.cc
@@ -20,7 +21,6 @@ set(crimson_seastore_srcs
2021
omap_manager.cc
2122
omap_manager/btree/btree_omap_manager.cc
2223
omap_manager/btree/omap_btree_node_impl.cc
23-
btree/fixed_kv_node.cc
2424
onode.cc
2525
onode_manager/staged-fltree/node.cc
2626
onode_manager/staged-fltree/node_extent_manager.cc

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

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55

66
#include "crimson/os/seastore/btree/fixed_kv_node.h"
77

8+
namespace crimson::os::seastore {
9+
class LogicalChildNode;
10+
}
11+
812
namespace crimson::os::seastore::backref {
913

1014
using backref_node_meta_t = fixed_kv_node_meta_t<paddr_t>;
@@ -86,6 +90,7 @@ class BackrefInternalNode
8690
check_capacity(BACKREF_NODE_SIZE),
8791
"INTERNAL_NODE_CAPACITY doesn't fit in BACKREF_NODE_SIZE");
8892
public:
93+
using key_type = paddr_t;
8994
template <typename... T>
9095
BackrefInternalNode(T&&... t) :
9196
FixedKVInternalNode(std::forward<T>(t)...) {}
@@ -104,12 +109,13 @@ class BackrefLeafNode
104109
paddr_t, paddr_le_t,
105110
backref_map_val_t, backref_map_val_le_t,
106111
BACKREF_NODE_SIZE,
107-
BackrefLeafNode,
108-
false> {
112+
BackrefInternalNode,
113+
BackrefLeafNode> {
109114
static_assert(
110115
check_capacity(BACKREF_NODE_SIZE),
111116
"LEAF_NODE_CAPACITY doesn't fit in BACKREF_NODE_SIZE");
112117
public:
118+
using key_type = paddr_t;
113119
template <typename... T>
114120
BackrefLeafNode(T&&... t) :
115121
FixedKVLeafNode(std::forward<T>(t)...) {}
@@ -123,8 +129,7 @@ class BackrefLeafNode
123129
const_iterator insert(
124130
const_iterator iter,
125131
paddr_t key,
126-
backref_map_val_t val,
127-
LogicalCachedExtent*) final {
132+
backref_map_val_t val) final {
128133
journal_insert(
129134
iter,
130135
key,
@@ -135,8 +140,7 @@ class BackrefLeafNode
135140

136141
void update(
137142
const_iterator iter,
138-
backref_map_val_t val,
139-
LogicalCachedExtent*) final {
143+
backref_map_val_t val) final {
140144
return journal_update(
141145
iter,
142146
val,
@@ -149,6 +153,46 @@ class BackrefLeafNode
149153
maybe_get_delta_buffer());
150154
}
151155

156+
void do_on_rewrite(Transaction &t, CachedExtent &extent) final {}
157+
void do_on_replace_prior() final {}
158+
void do_prepare_commit() final {}
159+
160+
161+
void on_split(
162+
Transaction &t,
163+
BackrefLeafNode &left,
164+
BackrefLeafNode &right) final {}
165+
166+
void on_merge(
167+
Transaction &t,
168+
BackrefLeafNode &left,
169+
BackrefLeafNode &right) final {}
170+
171+
void on_balance(
172+
Transaction &t,
173+
BackrefLeafNode &left,
174+
BackrefLeafNode &right,
175+
bool prefer_left,
176+
BackrefLeafNode &replacement_left,
177+
BackrefLeafNode &replacement_right) final {}
178+
179+
void adjust_copy_src_dest_on_split(
180+
Transaction &t,
181+
BackrefLeafNode &left,
182+
BackrefLeafNode &right) final {}
183+
184+
void adjust_copy_src_dest_on_merge(
185+
Transaction &t,
186+
BackrefLeafNode &left,
187+
BackrefLeafNode &right) final {}
188+
189+
void adjust_copy_src_dest_on_balance(
190+
Transaction &t,
191+
BackrefLeafNode &left,
192+
BackrefLeafNode &right,
193+
bool prefer_left,
194+
BackrefLeafNode &replacement_left,
195+
BackrefLeafNode &replacement_right) final {}
152196
// backref leaf nodes don't have to resolve relative addresses
153197
void resolve_relative_addrs(paddr_t base) final {}
154198

src/crimson/os/seastore/backref/btree_backref_manager.cc

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -47,24 +47,21 @@ const get_phy_tree_root_node_ret get_phy_tree_root_node<
4747
}
4848
}
4949

50-
template <typename ROOT>
51-
void link_phy_tree_root_node(RootBlockRef &root_block, ROOT* backref_root) {
52-
root_block->backref_root_node = backref_root;
53-
ceph_assert(backref_root != nullptr);
54-
backref_root->root_block = root_block;
55-
}
56-
57-
template void link_phy_tree_root_node(
58-
RootBlockRef &root_block, backref::BackrefInternalNode* backref_root);
59-
template void link_phy_tree_root_node(
60-
RootBlockRef &root_block, backref::BackrefLeafNode* backref_root);
61-
template void link_phy_tree_root_node(
62-
RootBlockRef &root_block, backref::BackrefNode* backref_root);
50+
template <typename RootT>
51+
class TreeRootLinker<RootBlock, RootT> {
52+
public:
53+
static void link_root(RootBlockRef &root_block, RootT* backref_root) {
54+
root_block->backref_root_node = backref_root;
55+
ceph_assert(backref_root != nullptr);
56+
backref_root->parent_of_root = root_block;
57+
}
58+
static void unlink_root(RootBlockRef &root_block) {
59+
root_block->backref_root_node = nullptr;
60+
}
61+
};
6362

64-
template <>
65-
void unlink_phy_tree_root_node<paddr_t>(RootBlockRef &root_block) {
66-
root_block->backref_root_node = nullptr;
67-
}
63+
template class TreeRootLinker<RootBlock, backref::BackrefInternalNode>;
64+
template class TreeRootLinker<RootBlock, backref::BackrefLeafNode>;
6865

6966
}
7067

@@ -231,8 +228,7 @@ BtreeBackrefManager::new_mapping(
231228
c,
232229
*state.insert_iter,
233230
state.last_end,
234-
val,
235-
nullptr
231+
val
236232
).si_then([&state, c, addr, len, key](auto &&p) {
237233
LOG_PREFIX(BtreeBackrefManager::new_mapping);
238234
auto [iter, inserted] = std::move(p);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class BtreeBackrefMapping : public BackrefMapping {
1515
: BackrefMapping(ctx) {}
1616
BtreeBackrefMapping(
1717
op_context_t<paddr_t> ctx,
18-
CachedExtentRef parent,
18+
BackrefLeafNodeRef parent,
1919
uint16_t pos,
2020
backref_map_val_t &val,
2121
backref_node_meta_t &&meta)
@@ -33,7 +33,7 @@ constexpr size_t BACKREF_BLOCK_SIZE = 4096;
3333

3434
using BackrefBtree = FixedKVBtree<
3535
paddr_t, backref_map_val_t, BackrefInternalNode,
36-
BackrefLeafNode, BtreeBackrefMapping, BACKREF_BLOCK_SIZE, false>;
36+
BackrefLeafNode, BtreeBackrefMapping, BACKREF_BLOCK_SIZE>;
3737

3838
class BtreeBackrefManager : public BackrefManager {
3939
public:

0 commit comments

Comments
 (0)