From: Yingxin Cheng Date: Fri, 9 Oct 2020 06:05:44 +0000 (+0800) Subject: crimson/onode-staged-tree: disable cursor validation in track_split() X-Git-Tag: v16.1.0~359^2~21 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3fd73336c15c9049c1235aa3746d54dbf13cabfe;p=ceph.git crimson/onode-staged-tree: disable cursor validation in track_split() Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc b/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc index eb28b6119447..f97e120444e7 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc @@ -25,7 +25,7 @@ using node_future = Node::node_future; tree_cursor_t::tree_cursor_t(Ref node, const search_position_t& pos) : leaf_node{node}, position{pos} { assert(!is_end()); - leaf_node->do_track_cursor(*this); + leaf_node->do_track_cursor(*this); } tree_cursor_t::tree_cursor_t( @@ -34,7 +34,7 @@ tree_cursor_t::tree_cursor_t( : leaf_node{node}, position{pos} { assert(!is_end()); update_kv(key, _p_value, v); - leaf_node->do_track_cursor(*this); + leaf_node->do_track_cursor(*this); } tree_cursor_t::tree_cursor_t(Ref node) @@ -59,6 +59,7 @@ const onode_t* tree_cursor_t::get_p_value() const { return p_value; } +template void tree_cursor_t::update_track( Ref node, const search_position_t& pos) { // the cursor must be already untracked @@ -69,8 +70,10 @@ void tree_cursor_t::update_track( position = pos; key_view.reset(); p_value = nullptr; - leaf_node->do_track_cursor(*this); + leaf_node->do_track_cursor(*this); } +template void tree_cursor_t::update_track(Ref, const search_position_t&); +template void tree_cursor_t::update_track(Ref, const search_position_t&); void tree_cursor_t::update_kv( const key_view_t& key, const onode_t* _p_value, layout_version_t v) const { @@ -709,7 +712,7 @@ Ref LeafNode::track_insert( for (auto& p_cursor : p_cursors) { search_position_t new_pos = p_cursor->get_position(); ++new_pos.index_by_stage(insert_stage); - p_cursor->update_track(this, new_pos); + p_cursor->update_track(this, new_pos); } // track insert @@ -726,7 +729,7 @@ void LeafNode::track_split( while (iter != tracked_cursors.end()) { search_position_t new_pos = iter->first; new_pos -= split_pos; - iter->second->update_track(right_node, new_pos); + iter->second->update_track(right_node, new_pos); ++iter; } tracked_cursors.erase(first, tracked_cursors.end()); diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node.h index 1364c448306e..040acb17e5a7 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node.h @@ -62,6 +62,7 @@ class tree_cursor_t final tree_cursor_t(Ref); const search_position_t& get_position() const { return position; } Ref get_leaf_node() { return leaf_node; } + template void update_track(Ref, const search_position_t&); void update_kv(const key_view_t&, const onode_t*, layout_version_t) const; void ensure_kv() const; @@ -262,8 +263,11 @@ class LeafNode final : public Node { layout_version_t get_layout_version() const { return layout_version; } std::tuple get_kv( const search_position_t&) const; + template void do_track_cursor(tree_cursor_t& cursor) { - validate_cursor(cursor); + if constexpr (VALIDATE) { + validate_cursor(cursor); + } auto& cursor_pos = cursor.get_position(); assert(tracked_cursors.find(cursor_pos) == tracked_cursors.end()); tracked_cursors[cursor_pos] = &cursor;