]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore: add EPHEMERAL_COLD device type
authorZhang Song <zhangsong325@gmail.com>
Tue, 14 Feb 2023 09:47:35 +0000 (17:47 +0800)
committerMatan Breizman <mbreizma@redhat.com>
Tue, 23 May 2023 08:09:21 +0000 (08:09 +0000)
rename SEGMENTED_EPHEMERAL to EPHEMERAL_MAIN

Signed-off-by: Zhang Song <zhangsong325@gmail.com>
(cherry picked from commit b40304092b6ce8b29e97437642928cc84afa1be5)

src/crimson/os/seastore/seastore_types.cc
src/crimson/os/seastore/seastore_types.h
src/crimson/os/seastore/segment_manager/ephemeral.cc
src/crimson/os/seastore/segment_manager/ephemeral.h
src/crimson/os/seastore/transaction_manager.cc
src/test/crimson/seastore/test_btree_lba_manager.cc
src/test/crimson/seastore/test_seastore_cache.cc
src/test/crimson/seastore/test_seastore_journal.cc
src/test/crimson/seastore/transaction_manager_test_state.h

index 6d1b4e50ca602f37e645b47a4e07df7aa6097d2a..a14201cbcf71c99c71f0de54992a47b08828f5d7 100644 (file)
@@ -797,8 +797,10 @@ std::ostream& operator<<(std::ostream& out, device_type_t t)
     return out << "SSD";
   case device_type_t::ZNS:
     return out << "ZNS";
-  case device_type_t::SEGMENTED_EPHEMERAL:
-    return out << "SEGMENTED_EPHEMERAL";
+  case device_type_t::EPHEMERAL_COLD:
+    return out << "EPHEMERAL_COLD";
+  case device_type_t::EPHEMERAL_MAIN:
+    return out << "EPHEMERAL_MAIN";
   case device_type_t::RANDOM_BLOCK_SSD:
     return out << "RANDOM_BLOCK_SSD";
   case device_type_t::RANDOM_BLOCK_EPHEMERAL:
index 7d7fd395c8c1c41e120c2107fe0c262d3f4fe649..15e1ad28ad67d3b3b6e8a92d6fb3ac2550b24eae 100644 (file)
@@ -876,7 +876,8 @@ enum class device_type_t : uint8_t {
   HDD,
   SSD,
   ZNS,
-  SEGMENTED_EPHEMERAL,
+  EPHEMERAL_COLD,
+  EPHEMERAL_MAIN,
   RANDOM_BLOCK_SSD,
   RANDOM_BLOCK_EPHEMERAL,
   NUM_TYPES
@@ -899,7 +900,7 @@ constexpr backend_type_t get_default_backend_of_device(device_type_t dtype) {
   assert(dtype != device_type_t::NONE &&
         dtype != device_type_t::NUM_TYPES);
   if (dtype >= device_type_t::HDD &&
-      dtype <= device_type_t::SEGMENTED_EPHEMERAL) {
+      dtype <= device_type_t::EPHEMERAL_MAIN) {
     return backend_type_t::SEGMENTED;
   } else {
     return backend_type_t::RANDOM_BLOCK;
index f8a20167fb75c3d6a55c422f1b68ff5037db9f97..4a4873afb94d9665135c919f1bd3756c6dc74895 100644 (file)
@@ -30,11 +30,21 @@ EphemeralSegmentManagerRef create_test_ephemeral() {
 }
 
 device_config_t get_ephemeral_device_config(
-    std::size_t index, std::size_t num_devices)
+    std::size_t index,
+    std::size_t num_main_devices,
+    std::size_t num_cold_devices)
 {
+  auto num_devices = num_main_devices + num_cold_devices;
   assert(num_devices > index);
+  auto get_sec_dtype = [num_main_devices](std::size_t idx) {
+    if (idx < num_main_devices) {
+      return device_type_t::EPHEMERAL_MAIN;
+    } else {
+      return device_type_t::EPHEMERAL_COLD;
+    }
+  };
+
   magic_t magic = 0xabcd;
-  auto type = device_type_t::SEGMENTED_EPHEMERAL;
   bool is_major_device;
   secondary_device_set_t secondary_devices;
   if (index == 0) {
@@ -44,7 +54,12 @@ device_config_t get_ephemeral_device_config(
          ++secondary_index) {
       device_id_t secondary_id = static_cast<device_id_t>(secondary_index);
       secondary_devices.insert({
-        secondary_index, device_spec_t{magic, type, secondary_id}
+        secondary_index,
+       device_spec_t{
+         magic,
+         get_sec_dtype(secondary_index),
+         secondary_id
+       }
       });
     }
   } else { // index > 0
@@ -54,7 +69,11 @@ device_config_t get_ephemeral_device_config(
   device_id_t id = static_cast<device_id_t>(index);
   seastore_meta_t meta = {};
   return {is_major_device,
-          device_spec_t{magic, type, id},
+          device_spec_t{
+            magic,
+           get_sec_dtype(index),
+            id
+          },
           meta,
           secondary_devices};
 }
index 773992c7e6d7f46f5f92a92411e63e93dee6f418..d7a3eb4a774715e93ad5844530298c833ecd7150 100644 (file)
@@ -42,7 +42,9 @@ std::ostream &operator<<(std::ostream &, const ephemeral_config_t &);
 EphemeralSegmentManagerRef create_test_ephemeral();
 
 device_config_t get_ephemeral_device_config(
-    std::size_t index, std::size_t num_devices);
+    std::size_t index,
+    std::size_t num_main_devices,
+    std::size_t num_cold_devices);
 
 class EphemeralSegment final : public Segment {
   friend class EphemeralSegmentManager;
@@ -70,7 +72,8 @@ class EphemeralSegmentManager final : public SegmentManager {
   std::optional<device_config_t> device_config;
 
   device_type_t get_device_type() const final {
-    return device_type_t::SEGMENTED_EPHEMERAL;
+    assert(device_config);
+    return device_config->spec.dtype;
   }
 
   size_t get_offset(paddr_t addr) {
index 5fa136534fc32274fd41f25cc28481bf3d00d003..28d8346e5c731dc25ded9a15dfc97ab14c37f143 100644 (file)
@@ -648,6 +648,9 @@ TransactionManagerRef make_transaction_manager(
   auto p_backend_type = primary_device->get_backend_type();
 
   if (p_backend_type == backend_type_t::SEGMENTED) {
+    auto dtype = primary_device->get_device_type();
+    ceph_assert(dtype != device_type_t::HDD &&
+               dtype != device_type_t::EPHEMERAL_COLD);
     sms->add_segment_manager(static_cast<SegmentManager*>(primary_device));
   } else {
     auto rbm = std::make_unique<BlockRBManager>(
index 56548a8c0821b8acf0f56d7c0c48844b0fc253d2..ab9ef79745987e1c4655b9e568ab4c970eb561b3 100644 (file)
@@ -122,7 +122,7 @@ struct btree_test_base :
     return segment_manager->init(
     ).safe_then([this] {
       return segment_manager->mkfs(
-        segment_manager::get_ephemeral_device_config(0, 1));
+        segment_manager::get_ephemeral_device_config(0, 1, 0));
     }).safe_then([this] {
       sms.reset(new SegmentManagerGroup());
       journal = journal::make_segmented(*this, *this);
index 3ed2462a43f895d25cbaf96fa132f527d9d8fcd4..b249d27e4617de5b88d238d914665fe47b5c98e4 100644 (file)
@@ -86,7 +86,7 @@ struct cache_test_t : public seastar_test_suite_t {
     return segment_manager->init(
     ).safe_then([this] {
       return segment_manager->mkfs(
-        segment_manager::get_ephemeral_device_config(0, 1));
+        segment_manager::get_ephemeral_device_config(0, 1, 0));
     }).safe_then([this] {
       epm.reset(new ExtentPlacementManager());
       cache.reset(new Cache(*epm));
index d323c00605b8ca0dd027c44260f8a313162b2492..46ec723a3524fb5fb3d3180e20d24cb6052697df 100644 (file)
@@ -146,7 +146,7 @@ struct journal_test_t : seastar_test_suite_t, SegmentProvider, JournalTrimmer {
     return segment_manager->init(
     ).safe_then([this] {
       return segment_manager->mkfs(
-        segment_manager::get_ephemeral_device_config(0, 1));
+        segment_manager::get_ephemeral_device_config(0, 1, 0));
     }).safe_then([this] {
       block_size = segment_manager->get_block_size();
       sms.reset(new SegmentManagerGroup());
index 5c5793111cf5d84a7933f846e2bd3202f5eadc3a..ec349d4888e5cd5ad01456ad02ad2ea15c7ac5e1 100644 (file)
@@ -63,7 +63,7 @@ public:
       });
     }).safe_then([this] {
       return segment_manager->mkfs(
-        segment_manager::get_ephemeral_device_config(0, get_num_devices()));
+        segment_manager::get_ephemeral_device_config(0, get_num_devices(), 0));
     }).safe_then([this] {
       return seastar::do_with(std::size_t(0), [this](auto &cnt) {
         return crimson::do_for_each(
@@ -73,7 +73,7 @@ public:
         {
           ++cnt;
           return sec_sm->mkfs(
-            segment_manager::get_ephemeral_device_config(cnt, get_num_devices()));
+            segment_manager::get_ephemeral_device_config(cnt, get_num_devices(), 0));
         });
       });
     }).handle_error(