Skip to content

Commit dca239f

Browse files
committed
crimson/os/seastore/btree: better UT checks
Signed-off-by: Xuehan Xu <[email protected]>
1 parent 9bb054b commit dca239f

File tree

1 file changed

+20
-18
lines changed

1 file changed

+20
-18
lines changed

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

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,7 @@ class FixedKVBtree {
505505
Transaction::get_extent_ret ret;
506506

507507
if constexpr (std::is_base_of_v<typename internal_node_t::base_t, child_node_t>) {
508+
assert(i->get_val() != P_ADDR_ZERO);
508509
ret = c.trans.get_extent(
509510
i->get_val().maybe_relative_to(node->get_paddr()),
510511
&child_node);
@@ -515,6 +516,9 @@ class FixedKVBtree {
515516
ret = c.trans.get_extent(
516517
i->get_val().pladdr.get_paddr().maybe_relative_to(node->get_paddr()),
517518
&child_node);
519+
if (i->get_val().pladdr.get_paddr() == P_ADDR_ZERO) {
520+
assert(ret == Transaction::get_extent_ret::ABSENT);
521+
}
518522
}
519523
if (ret == Transaction::get_extent_ret::PRESENT) {
520524
if (child_node->is_stable_written()) {
@@ -565,18 +569,8 @@ class FixedKVBtree {
565569
auto pos = n.lower_bound_offset(i->get_key());
566570
assert(pos < n.get_node_size());
567571
child = n.children[pos];
568-
if (is_valid_child_ptr(child)) {
569-
auto c = (child_node_t*)child;
570-
assert(c->has_parent_tracker());
571-
assert(c->get_parent_node().get() == &n);
572-
}
573572
} else {
574573
child = node->children[i->get_offset()];
575-
if (is_valid_child_ptr(child)) {
576-
auto c = (child_node_t*)child;
577-
assert(c->has_parent_tracker());
578-
assert(c->get_parent_node().get() == node.get());
579-
}
580574
}
581575

582576
if (!is_valid_child_ptr(child)) {
@@ -592,15 +586,23 @@ class FixedKVBtree {
592586
: true);
593587
}
594588
}
595-
} else if (child == get_reserved_ptr()) {
596-
if constexpr(
597-
!std::is_base_of_v<typename internal_node_t::base_t,
598-
child_node_t>) {
599-
assert(i->get_val().pladdr.is_paddr());
600-
assert(i->get_val().pladdr.get_paddr() == P_ADDR_ZERO);
601-
} else {
602-
ceph_abort();
589+
if (child == get_reserved_ptr()) {
590+
if constexpr(
591+
!std::is_base_of_v<typename internal_node_t::base_t,
592+
child_node_t>) {
593+
assert(i->get_val().pladdr.is_paddr());
594+
assert(i->get_val().pladdr.get_paddr() == P_ADDR_ZERO);
595+
} else {
596+
ceph_abort();
597+
}
603598
}
599+
} else {
600+
auto c = (child_node_t*)child;
601+
assert(c->has_parent_tracker());
602+
assert(c->get_parent_node().get() == node.get()
603+
|| (node->is_pending() && c->is_stable()
604+
&& c->get_parent_node().get() == &node->get_stable_for_key(
605+
i->get_key())));
604606
}
605607
} else {
606608
ceph_abort("impossible");

0 commit comments

Comments
 (0)