Skip to content

Commit

Permalink
Merge pull request ceph#47749 from xxhdx1985126/wip-intra-fixedkvbtre…
Browse files Browse the repository at this point in the history
…e-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 <yingxin.cheng@intel.com>
Reviewed-by: Samuel Just <sjust@redhat.com>
  • Loading branch information
cyx1231st committed May 9, 2023
2 parents 1fd8e52 + 33b56a0 commit 785f3ec
Show file tree
Hide file tree
Showing 42 changed files with 2,865 additions and 1,217 deletions.
3 changes: 3 additions & 0 deletions src/crimson/os/seastore/CMakeLists.txt
Expand Up @@ -7,6 +7,7 @@ set(crimson_seastore_srcs
transaction_manager.cc
transaction.cc
cache.cc
root_block.cc
lba_manager.cc
async_cleaner.cc
backref_manager.cc
Expand All @@ -17,6 +18,8 @@ set(crimson_seastore_srcs
omap_manager.cc
omap_manager/btree/btree_omap_manager.cc
omap_manager/btree/omap_btree_node_impl.cc
btree/btree_range_pin.cc
btree/fixed_kv_node.cc
onode.cc
onode_manager/staged-fltree/node.cc
onode_manager/staged-fltree/node_extent_manager.cc
Expand Down
10 changes: 9 additions & 1 deletion src/crimson/os/seastore/async_cleaner.cc
Expand Up @@ -1424,23 +1424,27 @@ bool SegmentCleaner::check_usage()
t,
[&tracker](
paddr_t paddr,
paddr_t backref_key,
extent_len_t len,
extent_types_t type,
laddr_t laddr)
{
if (paddr.get_addr_type() == paddr_types_t::SEGMENT) {
if (is_backref_node(type)) {
assert(laddr == L_ADDR_NULL);
assert(laddr == L_ADDR_NULL);
assert(backref_key != P_ADDR_NULL);
tracker->allocate(
paddr.as_seg_paddr().get_segment_id(),
paddr.as_seg_paddr().get_segment_off(),
len);
} else if (laddr == L_ADDR_NULL) {
assert(backref_key == P_ADDR_NULL);
tracker->release(
paddr.as_seg_paddr().get_segment_id(),
paddr.as_seg_paddr().get_segment_off(),
len);
} else {
assert(backref_key == P_ADDR_NULL);
tracker->allocate(
paddr.as_seg_paddr().get_segment_id(),
paddr.as_seg_paddr().get_segment_off(),
Expand Down Expand Up @@ -1724,6 +1728,7 @@ bool RBMCleaner::check_usage()
t,
[&tracker, &rbms](
paddr_t paddr,
paddr_t backref_key,
extent_len_t len,
extent_types_t type,
laddr_t laddr)
Expand All @@ -1732,14 +1737,17 @@ bool RBMCleaner::check_usage()
if (rbm->get_device_id() == paddr.get_device_id()) {
if (is_backref_node(type)) {
assert(laddr == L_ADDR_NULL);
assert(backref_key != P_ADDR_NULL);
tracker.allocate(
paddr,
len);
} else if (laddr == L_ADDR_NULL) {
assert(backref_key == P_ADDR_NULL);
tracker.release(
paddr,
len);
} else {
assert(backref_key == P_ADDR_NULL);
tracker.allocate(
paddr,
len);
Expand Down
10 changes: 7 additions & 3 deletions src/crimson/os/seastore/backref/backref_tree_node.h
Expand Up @@ -76,7 +76,8 @@ class BackrefLeafNode
paddr_t, paddr_le_t,
backref_map_val_t, backref_map_val_le_t,
BACKREF_NODE_SIZE,
BackrefLeafNode> {
BackrefLeafNode,
false> {
public:
template <typename... T>
BackrefLeafNode(T&&... t) :
Expand All @@ -91,7 +92,8 @@ class BackrefLeafNode
const_iterator insert(
const_iterator iter,
paddr_t key,
backref_map_val_t val) final {
backref_map_val_t val,
LogicalCachedExtent*) final {
journal_insert(
iter,
key,
Expand All @@ -102,7 +104,8 @@ class BackrefLeafNode

void update(
const_iterator iter,
backref_map_val_t val) final {
backref_map_val_t val,
LogicalCachedExtent*) final {
return journal_update(
iter,
val,
Expand Down Expand Up @@ -130,4 +133,5 @@ using BackrefLeafNodeRef = BackrefLeafNode::Ref;
template <> struct fmt::formatter<crimson::os::seastore::backref::backref_map_val_t> : fmt::ostream_formatter {};
template <> struct fmt::formatter<crimson::os::seastore::backref::BackrefInternalNode> : fmt::ostream_formatter {};
template <> struct fmt::formatter<crimson::os::seastore::backref::BackrefLeafNode> : fmt::ostream_formatter {};
template <> struct fmt::formatter<crimson::os::seastore::backref::backref_node_meta_t> : fmt::ostream_formatter {};
#endif

0 comments on commit 785f3ec

Please sign in to comment.