From: Yingxin Cheng Date: Thu, 2 Sep 2021 03:05:18 +0000 (+0800) Subject: crimson/onode-staged-tree: implement hint in NodeImpl::rebuild_extent() X-Git-Tag: v17.1.0~964^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2c48d25d1991c9b575d7d83c92cfc1c26b47cc58;p=ceph.git crimson/onode-staged-tree: implement hint in NodeImpl::rebuild_extent() Get the hint from its first key when rebuilding a node extent. 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 4171490e639..1fec53bcfa9 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc @@ -605,7 +605,7 @@ Node::try_merge_adjacent( // so use rebuild_extent() as a workaround to rebuild the node from a // fresh extent, thus no need to generate delta. auto left_addr = left_for_merge->impl->laddr(); - return left_for_merge->rebuild_extent(c, L_ADDR_MIN + return left_for_merge->rebuild_extent(c ).si_then([c, update_index_after_merge, left_addr, merge_stage = merge_stage, @@ -744,7 +744,7 @@ eagain_ifuture> Node::load( }); } -eagain_ifuture Node::rebuild_extent(context_t c, laddr_t hint) +eagain_ifuture Node::rebuild_extent(context_t c) { LOG_PREFIX(OTree::Node::rebuild_extent); DEBUGT("{} ...", c.t, get_name()); @@ -753,7 +753,7 @@ eagain_ifuture Node::rebuild_extent(context_t c, laddr_t hint // note: laddr can be changed after rebuild, but we don't fix the parent // mapping as it is part of the merge process. - return impl->rebuild_extent(c, hint); + return impl->rebuild_extent(c); } eagain_ifuture<> Node::retire(context_t c, Ref&& this_ref) 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 6392da50d37..c02a24d50ff 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node.h @@ -428,7 +428,7 @@ class Node eagain_ifuture<> erase_node(context_t, Ref&&); template eagain_ifuture<> fix_parent_index(context_t, Ref&&, bool); - eagain_ifuture rebuild_extent(context_t, laddr_t); + eagain_ifuture rebuild_extent(context_t); eagain_ifuture<> retire(context_t, Ref&&); void make_tail(context_t); diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_impl.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_impl.h index f8a8aaa1cd4..cf452618b6f 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_impl.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_impl.h @@ -90,7 +90,7 @@ class NodeImpl { virtual std::tuple erase(const search_position_t&) = 0; virtual std::tuple evaluate_merge(NodeImpl&) = 0; virtual search_position_t merge(NodeExtentMutable&, NodeImpl&, match_stage_t, extent_len_t) = 0; - virtual eagain_ifuture rebuild_extent(context_t, laddr_t) = 0; + virtual eagain_ifuture rebuild_extent(context_t) = 0; virtual eagain_ifuture<> retire_extent(context_t) = 0; virtual search_position_t make_tail() = 0; diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_layout.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_layout.h index cc1841ce9fb..436f883700a 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_layout.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_layout.h @@ -306,7 +306,12 @@ class NodeLayoutT final : public InternalNodeImpl, public LeafNodeImpl { } eagain_ifuture - rebuild_extent(context_t c, laddr_t hint) override { + rebuild_extent(context_t c) override { + assert(!is_keys_empty()); + full_key_t first_index; + STAGE_T::template get_slot( + extent.read(), position_t::begin(), &first_index, nullptr); + auto hint = first_index.get_hint(); return extent.rebuild(c, hint).si_then([this] (auto mut) { // addr may change build_name(); diff --git a/src/test/crimson/seastore/onode_tree/test_staged_fltree.cc b/src/test/crimson/seastore/onode_tree/test_staged_fltree.cc index 771e5b03569..a2ef111c874 100644 --- a/src/test/crimson/seastore/onode_tree/test_staged_fltree.cc +++ b/src/test/crimson/seastore/onode_tree/test_staged_fltree.cc @@ -908,7 +908,7 @@ class DummyChildPool { ceph_abort("impossible path"); } search_position_t merge(NodeExtentMutable&, NodeImpl&, match_stage_t, extent_len_t) override { ceph_abort("impossible path"); } - eagain_ifuture rebuild_extent(context_t, laddr_t) override { + eagain_ifuture rebuild_extent(context_t) override { ceph_abort("impossible path"); } node_stats_t get_stats() const override { ceph_abort("impossible path"); }