]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test/seastore: use tm_make_config_t to get default_placement_hint
authormyoungwon oh <ohmyoungwon@gmail.com>
Thu, 12 May 2022 07:32:34 +0000 (16:32 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Thu, 19 May 2022 00:51:28 +0000 (09:51 +0900)
Signed-off-by: Myoungwon Oh <myoungwon.oh@samsung.com>
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/transaction_manager.cc
src/crimson/os/seastore/transaction_manager.h
src/crimson/tools/store_nbd/tm_driver.cc
src/test/crimson/seastore/test_transaction_manager.cc
src/test/crimson/seastore/transaction_manager_test_state.h

index 157c3fadbaa806a965a66e00dd5e1f015a47ee78..ffaf6ebf39af5840de51fa67472542e3c5d7e444 100644 (file)
@@ -1692,7 +1692,8 @@ seastar::future<std::unique_ptr<SeaStore>> make_seastore(
   return Device::make_device(
     device
   ).then([&device](DeviceRef device_obj) {
-    tm_make_config_t config {false, false};
+    tm_make_config_t config;
+    config.detailed = false;
     auto tm = make_transaction_manager(config);
     auto cm = std::make_unique<collection_manager::FlatCollectionManager>(*tm);
     return std::make_unique<SeaStore>(
index 3834dd78de431cb780e608851a86ed55bcc57dc9..c21e5d27d584f78a02df2b456b92f8cdc688c98c 100644 (file)
@@ -649,7 +649,7 @@ TransactionManagerRef make_transaction_manager(tm_make_config_t config)
     *cache,
     config.detailed);
   JournalRef journal;
-  if (!config.cbjournal) {
+  if (config.j_type == journal_type::SEGMENT_JOURNAL) {
     journal = journal::make_segmented(*segment_cleaner);
   } else {
     journal = journal::make_circularbounded(
index efdee90c66922540817956064318cd6368345475..59f561888ab0367608b8e58a601cdd9db7cf99bf 100644 (file)
@@ -593,11 +593,14 @@ using TransactionManagerRef = std::unique_ptr<TransactionManager>;
 
 struct tm_make_config_t {
   bool detailed = true;
-  bool cbjournal = false;
+  journal_type j_type = journal_type::SEGMENT_JOURNAL;
+  placement_hint_t default_placement_hint =
+    placement_hint_t::HOT;
   static tm_make_config_t get_default() {
     return tm_make_config_t {
       true,
-      false
+      journal_type::SEGMENT_JOURNAL,
+      placement_hint_t::HOT
     };
   }
 };
index 549ef8e657b93705ff0d658a35b82e02e311f443..5ee810f682e646701782cd994afca7ce33b2e098 100644 (file)
@@ -131,7 +131,8 @@ seastar::future<bufferlist> TMDriver::read(
 
 void TMDriver::init()
 {
-  tm_make_config_t config {false, false};
+  tm_make_config_t config;
+  config.detailed = false;
   tm = make_transaction_manager(config);
   tm->add_device(device.get(), true);
 }
index 0219f2dffe82bd47b4866204b54d75c732af0322..549ccaf4f17bd59f59644b853656c43c1cbd3512 100644 (file)
@@ -58,6 +58,7 @@ struct transaction_manager_test_t :
 
   std::random_device rd;
   std::mt19937 gen;
+  tm_make_config_t tm_config;
 
   transaction_manager_test_t(std::size_t num_devices)
     : TMTestState(num_devices), gen(rd()) {
@@ -72,16 +73,14 @@ struct transaction_manager_test_t :
     return static_cast<char>(std::uniform_int_distribution<>(0, 255)(gen));
   }
 
-  bool for_segmented() {
-    std::string j_type = GetParam();
-    return j_type == "segmented";
-  }
   seastar::future<> set_up_fut() final {
     std::string j_type = GetParam();
     if (j_type == "segmented") {
-      return tm_setup();
+      return tm_setup(tm_config);
     } else if (j_type == "circularbounded") {
-      return tm_setup(journal_type::CIRCULARBOUNDED_JOURNAL);
+      tm_config.j_type = journal_type::CIRCULARBOUNDED_JOURNAL;
+      tm_config.default_placement_hint = placement_hint_t::REWRITE;
+      return tm_setup(tm_config);
     } else {
       ceph_assert(0 == "no support");
     }
@@ -625,7 +624,7 @@ struct transaction_manager_test_t :
                [&, this](auto) {
                  return tm->alloc_extent<TestBlock>(
                    *(t.t), L_ADDR_MIN, size,
-                   for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE
+                   tm_config.default_placement_hint
                  ).si_then([&, this](auto extent) {
                    extent->set_contents(get_random_contents());
                    EXPECT_FALSE(
@@ -668,7 +667,7 @@ struct transaction_manager_test_t :
                 t,
                 i * BSIZE,
                 BSIZE,
-               for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+               tm_config.default_placement_hint);
               ASSERT_EQ(i * BSIZE, extent->get_laddr());
               if (try_submit_transaction(std::move(t)))
                 break;
@@ -736,7 +735,7 @@ TEST_P(tm_single_device_test_t, basic)
        ADDR,
        SIZE,
        'a',
-       for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+       tm_config.default_placement_hint);
       ASSERT_EQ(ADDR, extent->get_laddr());
       check_mappings(t);
       check();
@@ -758,7 +757,7 @@ TEST_P(tm_single_device_test_t, mutate)
        ADDR,
        SIZE,
        'a',
-       for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+       tm_config.default_placement_hint);
       ASSERT_EQ(ADDR, extent->get_laddr());
       check_mappings(t);
       check();
@@ -800,7 +799,7 @@ TEST_P(tm_single_device_test_t, allocate_lba_conflict)
       ADDR,
       SIZE,
       'a',
-      for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+      tm_config.default_placement_hint);
     ASSERT_EQ(ADDR, extent->get_laddr());
     check_mappings(t);
     check();
@@ -810,7 +809,7 @@ TEST_P(tm_single_device_test_t, allocate_lba_conflict)
       ADDR2,
       SIZE,
       'a',
-      for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+      tm_config.default_placement_hint);
     ASSERT_EQ(ADDR2, extent2->get_laddr());
     check_mappings(t2);
     extent2.reset();
@@ -831,7 +830,7 @@ TEST_P(tm_single_device_test_t, mutate_lba_conflict)
          t,
          laddr_t(i * SIZE),
          SIZE,
-         for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+         tm_config.default_placement_hint);
       }
       check_mappings(t);
       submit_transaction(std::move(t));
@@ -874,7 +873,7 @@ TEST_P(tm_single_device_test_t, concurrent_mutate_lba_no_conflict)
          t,
          laddr_t(i * SIZE),
          SIZE,
-         for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+         tm_config.default_placement_hint);
       }
       submit_transaction(std::move(t));
     }
@@ -905,7 +904,7 @@ TEST_P(tm_single_device_test_t, create_remove_same_transaction)
        ADDR,
        SIZE,
        'a',
-       for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+       tm_config.default_placement_hint);
       ASSERT_EQ(ADDR, extent->get_laddr());
       check_mappings(t);
       dec_ref(t, ADDR);
@@ -916,7 +915,7 @@ TEST_P(tm_single_device_test_t, create_remove_same_transaction)
        ADDR,
        SIZE,
        'a',
-       for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+       tm_config.default_placement_hint);
 
       submit_transaction(std::move(t));
       check();
@@ -937,7 +936,7 @@ TEST_P(tm_single_device_test_t, split_merge_read_same_transaction)
          t,
          laddr_t(i * SIZE),
          SIZE,
-         for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+         tm_config.default_placement_hint);
       }
       check_mappings(t);
       submit_transaction(std::move(t));
@@ -969,7 +968,7 @@ TEST_P(tm_single_device_test_t, inc_dec_ref)
        ADDR,
        SIZE,
        'a',
-       for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+       tm_config.default_placement_hint);
       ASSERT_EQ(ADDR, extent->get_laddr());
       check_mappings(t);
       check();
@@ -1016,7 +1015,7 @@ TEST_P(tm_single_device_test_t, cause_lba_split)
        i * SIZE,
        SIZE,
        (char)(i & 0xFF),
-       for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+       tm_config.default_placement_hint);
       ASSERT_EQ(i * SIZE, extent->get_laddr());
       submit_transaction(std::move(t));
     }
@@ -1037,7 +1036,7 @@ TEST_P(tm_single_device_test_t, random_writes)
        t,
        i * BSIZE,
        BSIZE,
-       for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+       tm_config.default_placement_hint);
       ASSERT_EQ(i * BSIZE, extent->get_laddr());
       submit_transaction(std::move(t));
     }
@@ -1056,7 +1055,7 @@ TEST_P(tm_single_device_test_t, random_writes)
            t,
            TOTAL + (k * PADDING_SIZE),
            PADDING_SIZE,
-           for_segmented() ? placement_hint_t::HOT : placement_hint_t::REWRITE);
+           tm_config.default_placement_hint);
          dec_ref(t, padding->get_laddr());
        }
        submit_transaction(std::move(t));
index 96456571fada9cae34f70573726fe86f56233941..dfa3b8e2eb60775b1731ff8df5b2205fbfd2a5f3 100644 (file)
@@ -26,7 +26,7 @@ protected:
   segment_manager::EphemeralSegmentManagerRef segment_manager;
   std::list<segment_manager::EphemeralSegmentManagerRef> secondary_segment_managers;
   std::unique_ptr<nvme_device::NVMeBlockDevice> rb_device;
-  journal_type j_type = journal_type::SEGMENT_JOURNAL;
+  tm_make_config_t tm_config;
 
   EphemeralTestState(std::size_t num_segment_managers) {
     assert(num_segment_managers > 0);
@@ -62,13 +62,14 @@ protected:
     _mount().handle_error(crimson::ct_error::assert_all{}).get0();
   }
 
-  seastar::future<> tm_setup(journal_type j_type = journal_type::SEGMENT_JOURNAL) {
-    this->j_type = j_type;
+  seastar::future<> tm_setup(
+    tm_make_config_t config = tm_make_config_t::get_default()) {
+    tm_config = config;
     segment_manager = segment_manager::create_test_ephemeral();
     for (auto &sec_sm : secondary_segment_managers) {
       sec_sm = segment_manager::create_test_ephemeral();
     }
-    if (j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
+    if (tm_config.j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
       auto config =
        journal::CircularBoundedJournal::mkfs_config_t::get_default();
       rb_device.reset(new nvme_device::TestMemory(config.total_size));
@@ -121,7 +122,7 @@ protected:
       for (auto &sec_sm : secondary_segment_managers) {
         sec_sm.reset();
       }
-      if (j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
+      if (tm_config.j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
        rb_device.reset();
       }
     });
@@ -154,11 +155,9 @@ protected:
   TMTestState(std::size_t num_devices) : EphemeralTestState(num_devices) {}
 
   virtual void _init() override {
-    tm_make_config_t config;
-    config.cbjournal = j_type == journal_type::SEGMENT_JOURNAL ? false : true;
-    tm = make_transaction_manager(config);
+    tm = make_transaction_manager(tm_config);
     tm->add_device(segment_manager.get(), true);
-    if (j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
+    if (tm_config.j_type == journal_type::CIRCULARBOUNDED_JOURNAL) {
       tm->add_device(rb_device.get(), false);
       static_cast<journal::CircularBoundedJournal*>(tm->get_journal())->
        add_device(rb_device.get());
@@ -201,7 +200,7 @@ protected:
   }
 
   virtual FuturizedStore::mkfs_ertr::future<> _mkfs() {
-    if (j_type == journal_type::SEGMENT_JOURNAL) {
+    if (tm_config.j_type == journal_type::SEGMENT_JOURNAL) {
       return tm->mkfs(
       ).handle_error(
        crimson::ct_error::assert_all{"Error in mkfs"}