]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/onode-staged-tree: integrate TMTestState
authorYingxin Cheng <yingxin.cheng@intel.com>
Fri, 16 Oct 2020 03:22:05 +0000 (11:22 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Tue, 1 Dec 2020 04:50:54 +0000 (12:50 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/test/crimson/seastore/onode_tree/test_staged_fltree.cc
src/tools/crimson/perf_staged_fltree.cc

index 72c2a9990feb9c3432bb5e18096ef3901f8bf8ec..45d60dc569c65800626a91365159fa1004031acf 100644 (file)
@@ -9,23 +9,16 @@
 #include <vector>
 
 #include "crimson/common/log.h"
-#include "crimson/os/seastore/cache.h"
 #include "crimson/os/seastore/onode_manager/staged-fltree/node.h"
 #include "crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h"
 #include "crimson/os/seastore/onode_manager/staged-fltree/node_layout.h"
 #include "crimson/os/seastore/onode_manager/staged-fltree/tree.h"
 #include "crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h"
-#include "crimson/os/seastore/segment_manager.h"
-#include "crimson/os/seastore/transaction_manager.h"
 
 #include "test/crimson/gtest_seastar.h"
+#include "test/crimson/seastore/transaction_manager_test_state.h"
 
 using namespace crimson::os::seastore::onode;
-namespace seastore = crimson::os::seastore;
-using seastore::lba_manager::create_lba_manager;
-using seastore::segment_manager::create_ephemeral;
-using seastore::segment_manager::DEFAULT_TEST_EPHEMERAL;
-using sc_config_t = seastore::SegmentCleaner::config_t;
 
 namespace {
   constexpr bool IS_DUMMY_SYNC = false;
@@ -1153,64 +1146,43 @@ TEST_F(c_dummy_test_t, 5_split_internal_node)
   });
 }
 
-struct d_seastore_tree_test_t : public seastar_test_suite_t {
-  std::unique_ptr<seastore::SegmentManager> segment_manager;
-  seastore::SegmentCleaner segment_cleaner;
-  seastore::Journal journal;
-  seastore::Cache cache;
-  seastore::LBAManagerRef lba_manager;
-  seastore::TransactionManager tm;
+struct d_seastore_tree_test_t :
+    public seastar_test_suite_t, TMTestState {
   KVPool kvs;
-  TreeBuilder<true> tree;
+  std::unique_ptr<TreeBuilder<true>> tree;
 
   d_seastore_tree_test_t()
-    : segment_manager(create_ephemeral(DEFAULT_TEST_EPHEMERAL)),
-      segment_cleaner(sc_config_t::default_from_segment_manager(*segment_manager)),
-      journal(*segment_manager),
-      cache(*segment_manager),
-      lba_manager(create_lba_manager(*segment_manager, cache)),
-      tm(*segment_manager, segment_cleaner, journal, cache, *lba_manager),
-      kvs({8, 11, 64, 256, 301, 320},
+    : kvs{{8, 11, 64, 256, 301, 320},
           {8, 16, 128, 512, 576, 640},
-          {0, 32}, {0, 10}, {0, 4}),
-      tree{kvs,
+          {0, 32}, {0, 10}, {0, 4}} {}
+
+  seastar::future<> set_up_fut() override final {
+    return tm_setup().then([this] {
+      tree = std::make_unique<TreeBuilder<true>>(kvs,
 #if 0
         NodeExtentManager::create_dummy(IS_DUMMY_SYNC)
 #else
-        NodeExtentManager::create_seastore(tm)
+        NodeExtentManager::create_seastore(*tm)
 #endif
-      } {
-    journal.set_segment_provider(&segment_cleaner);
-    segment_cleaner.set_extent_callback(&tm);
-  }
-
-  seastar::future<> set_up_fut() override final {
-    return segment_manager->init().safe_then([this] {
-      return tm.mkfs();
-    }).safe_then([this] {
-      return tm.mount();
-    }).safe_then([this] {
-      return tree.bootstrap();
+      );
+      return tree->bootstrap();
     }).handle_error(
       crimson::ct_error::all_same_way([] {
-        ASSERT_FALSE("Unable to mkfs");
+        ASSERT_FALSE("Unable to initiate tree");
       })
     );
   }
 
-  seastar::future<> tear_down_fut() final {
-    return tm.close().handle_error(
-      crimson::ct_error::all_same_way([] {
-        ASSERT_FALSE("Unable to close");
-      })
-    );
+  seastar::future<> tear_down_fut() override final {
+    tree.reset();
+    return tm_teardown();
   }
 };
 
 TEST_F(d_seastore_tree_test_t, 6_random_insert_leaf_node)
 {
   run([this] {
-    return tree.run().handle_error(
+    return tree->run().handle_error(
       crimson::ct_error::all_same_way([] {
         ASSERT_FALSE("Test failed");
       })
index 9b3de7485504d3e39124b36764be4b8773ba4552..bd05cb39e94e41e5c7d16f89e55f2dca75108972 100644 (file)
@@ -8,43 +8,19 @@
 
 #include "crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h"
 #include "crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h"
-#include "crimson/os/seastore/segment_manager.h"
-#include "crimson/os/seastore/transaction_manager.h"
+#include "test/crimson/seastore/transaction_manager_test_state.h"
 
 using namespace crimson::os::seastore::onode;
 namespace bpo = boost::program_options;
-namespace seastore = crimson::os::seastore;
-using seastore::lba_manager::create_lba_manager;
-using seastore::segment_manager::create_ephemeral;
-using seastore::segment_manager::DEFAULT_TEST_EPHEMERAL;
-using sc_config_t = seastore::SegmentCleaner::config_t;
 
 template <bool TRACK>
-class PerfTree {
+class PerfTree : public TMTestState {
  public:
-  PerfTree(bool is_dummy,
-           const std::vector<size_t>& str_sizes,
-           const std::vector<size_t>& onode_sizes,
-           const std::pair<int, int>& range2,
-           const std::pair<unsigned, unsigned>& range1,
-           const std::pair<unsigned, unsigned>& range0)
-    : is_dummy{is_dummy},
-      segment_manager(create_ephemeral(DEFAULT_TEST_EPHEMERAL)),
-      segment_cleaner(sc_config_t::default_from_segment_manager(*segment_manager)),
-      journal(*segment_manager),
-      cache(*segment_manager),
-      lba_manager(create_lba_manager(*segment_manager, cache)),
-      tm(*segment_manager, segment_cleaner, journal, cache, *lba_manager),
-      kvs(str_sizes, onode_sizes, range2, range1, range0),
-      tree{kvs, is_dummy ? NodeExtentManager::create_dummy(true)
-                         : NodeExtentManager::create_seastore(tm)} {
-    journal.set_segment_provider(&segment_cleaner);
-    segment_cleaner.set_extent_callback(&tm);
-  }
+  PerfTree(bool is_dummy) : is_dummy{is_dummy} {}
 
-  seastar::future<> run() {
-    return start().then([this] {
-      return tree.run().handle_error(
+  seastar::future<> run(KVPool& kvs) {
+    return start(kvs).then([this] {
+      return tree->run().handle_error(
         crimson::ct_error::all_same_way([] {
           ceph_abort("runtime error");
         })
@@ -55,20 +31,20 @@ class PerfTree {
   }
 
  private:
-  seastar::future<> start() {
+  seastar::future<> start(KVPool& kvs) {
     if (is_dummy) {
-      return tree.bootstrap().handle_error(
+      tree = std::make_unique<TreeBuilder<TRACK>>(
+          kvs,  NodeExtentManager::create_dummy(true));
+      return tree->bootstrap().handle_error(
         crimson::ct_error::all_same_way([] {
           ceph_abort("Unable to mkfs");
         })
       );
     } else {
-      return segment_manager->init().safe_then([this] {
-        return tm.mkfs();
-      }).safe_then([this] {
-        return tm.mount();
-      }).safe_then([this] {
-        return tree.bootstrap();
+      return tm_setup().then([this, &kvs] {
+        tree = std::make_unique<TreeBuilder<TRACK>>(
+            kvs,  NodeExtentManager::create_seastore(*tm));
+        return tree->bootstrap();
       }).handle_error(
         crimson::ct_error::all_same_way([] {
           ceph_abort("Unable to mkfs");
@@ -78,26 +54,16 @@ class PerfTree {
   }
 
   seastar::future<> stop() {
+    tree.reset();
     if (is_dummy) {
       return seastar::now();
     } else {
-      return tm.close().handle_error(
-        crimson::ct_error::all_same_way([] {
-          ceph_abort("Unable to close");
-        })
-      );
+      return tm_teardown();
     }
   }
 
   bool is_dummy;
-  std::unique_ptr<seastore::SegmentManager> segment_manager;
-  seastore::SegmentCleaner segment_cleaner;
-  seastore::Journal journal;
-  seastore::Cache cache;
-  seastore::LBAManagerRef lba_manager;
-  seastore::TransactionManager tm;
-  KVPool kvs;
-  TreeBuilder<TRACK> tree;
+  std::unique_ptr<TreeBuilder<TRACK>> tree;
 };
 
 template <bool TRACK>
@@ -121,9 +87,12 @@ seastar::future<> run(const bpo::variables_map& config) {
     auto range0 = config["range0"].as<std::vector<unsigned>>();
     ceph_assert(range0.size() == 2);
 
-    PerfTree<TRACK> perf{is_dummy, str_sizes, onode_sizes,
-      {range2[0], range2[1]}, {range1[0], range1[1]}, {range0[0], range0[1]}};
-    perf.run().get0();
+    KVPool kvs{str_sizes, onode_sizes,
+               {range2[0], range2[1]},
+               {range1[0], range1[1]},
+               {range0[0], range0[1]}};
+    PerfTree<TRACK> perf{is_dummy};
+    perf.run(kvs).get0();
   });
 }