@@ -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