From 3b0713f3b0c1138fe9759f700264a15ef44278d2 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Thu, 4 Feb 2021 13:30:58 +0800 Subject: [PATCH] test/crimson/onode-staged-tree: test Cursor::get_next() Signed-off-by: Yingxin Cheng --- .../onode_manager/staged-fltree/tree_utils.h | 14 +++++++++++++ .../seastore/onode_tree/test_staged_fltree.cc | 21 +++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h b/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h index 2970ad010e2..880a1734459 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h @@ -330,6 +330,7 @@ class TreeBuilder { } future<> validate(Transaction& t) { + return seastar::async([this, &t] { logger().info("Verifing insertion ..."); auto iter = kvs.begin(); while (!iter.is_end()) { @@ -338,6 +339,19 @@ class TreeBuilder { Values::validate_cursor(cursor, k, v); ++iter; } + + logger().info("Verifing range query ..."); + iter = kvs.begin(); + auto cursor = tree->begin(t).unsafe_get0(); + while (!iter.is_end()) { + assert(!cursor.is_end()); + auto [k, v] = iter.get_kv(); + Values::validate_cursor(cursor, k, v); + cursor = cursor.get_next(t).unsafe_get0(); + ++iter; + } + assert(cursor.is_end()); + logger().info("Verify done!"); }); } 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 398bc567d69..c0c0d9c96d8 100644 --- a/src/test/crimson/seastore/onode_tree/test_staged_fltree.cc +++ b/src/test/crimson/seastore/onode_tree/test_staged_fltree.cc @@ -345,11 +345,28 @@ TEST_F(b_dummy_tree_test_t, 3_random_insert_leaf_node) Values::validate_cursor(cursor, largest_key, largest_value); } + // validate range query + { + kvs.clear(); + for (auto& [k, v, c] : insert_history) { + kvs.emplace_back(k, v); + } + insert_history.clear(); + std::sort(kvs.begin(), kvs.end(), [](auto& l, auto& r) { + return l.first < r.first; + }); + auto cursor = tree.begin(t).unsafe_get0(); + for (auto& [k, v] : kvs) { + ASSERT_FALSE(cursor.is_end()); + Values::validate_cursor(cursor, k, v); + cursor = cursor.get_next(t).unsafe_get0(); + } + ASSERT_TRUE(cursor.is_end()); + } + std::ostringstream oss; tree.dump(t, oss); logger().info("\n{}\n", oss.str()); - - insert_history.clear(); }); } -- 2.39.5