]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: introduce get_backend_type to Device
authorZhang Song <zhangsong325@gmail.com>
Mon, 19 Sep 2022 08:33:10 +0000 (16:33 +0800)
committerZhang Song <zhangsong325@gmail.com>
Thu, 22 Sep 2022 05:45:55 +0000 (13:45 +0800)
Signed-off-by: Zhang Song <zhangsong325@gmail.com>
src/crimson/os/seastore/device.h
src/crimson/os/seastore/extent_placement_manager.cc
src/crimson/os/seastore/extent_placement_manager.h
src/crimson/os/seastore/random_block_manager/rbm_device.h
src/crimson/os/seastore/segment_manager.h
src/crimson/os/seastore/transaction_manager.cc

index 5f0af3616d0683bb3a264f68c1d07f20b46c4d0f..814413aec3ec0fc39d15ec8ca84094a74c7b2988 100644 (file)
@@ -67,6 +67,8 @@ public:
 
   virtual device_type_t get_device_type() const = 0;
 
+  virtual backend_type_t get_backend_type() const = 0;
+
   virtual const seastore_meta_t &get_meta() const = 0;
 
   virtual seastore_off_t get_block_size() const = 0;
index 27a882dca8cc2b1dda5c32b32d8b670ae45a558a..8e77a6804268030ad9af7038705e9345657730a6 100644 (file)
@@ -210,12 +210,12 @@ void ExtentPlacementManager::set_primary_device(Device *device)
 {
   ceph_assert(primary_device == nullptr);
   primary_device = device;
-  if (device->get_device_type() == device_type_t::SSD) {
+  if (device->get_backend_type() == backend_type_t::SEGMENTED) {
     prefer_ool = false;
     ceph_assert(devices_by_id[device->get_device_id()] == device);
   } else {
     // RBM device is not in the cleaner.
-    ceph_assert(device->get_device_type() == device_type_t::RANDOM_BLOCK_SSD);
+    ceph_assert(device->get_backend_type() == backend_type_t::RANDOM_BLOCK);
     prefer_ool = true;
     add_device(primary_device);
   }
index d8ff09a11468177aa96d48c6fbde111f9c331480..9307cbf506cf6e5cda3fcfc6033e110707c3cd8c 100644 (file)
@@ -236,7 +236,7 @@ public:
   // Testing interfaces
 
   void test_init_no_background(Device *test_device) {
-    assert(test_device->get_device_type() == device_type_t::SSD);
+    assert(test_device->get_backend_type() == backend_type_t::SEGMENTED);
     add_device(test_device);
     set_primary_device(test_device);
   }
index 5ec9266b4a1f71ae7d84230aefdedf80a0aa53c8..d789813e179a99a18c7de7789f6909ea9e956432 100644 (file)
@@ -108,6 +108,10 @@ public:
     return device_type_t::RANDOM_BLOCK_SSD;
   }
 
+  backend_type_t get_backend_type() const final {
+    return backend_type_t::RANDOM_BLOCK;
+  }
+
   const seastore_meta_t &get_meta() const final {
     return meta;
   }
index 365e09d2089488ea00b796cdef974140b1c7b7d1..78cba8991dbb48e76e3d94e3c7367fa2d45a0e45 100644 (file)
@@ -155,6 +155,10 @@ public:
     return device_type_t::SSD;
   }
 
+  backend_type_t get_backend_type() const final {
+    return backend_type_t::SEGMENTED;
+  }
+
   using open_ertr = crimson::errorator<
     crimson::ct_error::input_output_error,
     crimson::ct_error::invarg,
index b18836c2e8e848fea6beb3dbe18439c11fb1f136..459ffac733fe549239321e455437754c665618de 100644 (file)
@@ -630,20 +630,18 @@ TransactionManagerRef make_transaction_manager(
   auto sms = std::make_unique<SegmentManagerGroup>();
   auto backref_manager = create_backref_manager(*cache);
 
-  auto p_device_type = primary_device->get_device_type();
-  ceph_assert(p_device_type == device_type_t::SSD ||
-              p_device_type == device_type_t::RANDOM_BLOCK_SSD);
+  auto p_backend_type = primary_device->get_backend_type();
 
-  if (p_device_type == device_type_t::SSD) {
+  if (p_backend_type == backend_type_t::SEGMENTED) {
     sms->add_segment_manager(static_cast<SegmentManager*>(primary_device));
   }
+
   for (auto &p_dev : secondary_devices) {
-    ceph_assert(p_dev->get_device_type() == device_type_t::SSD);
+    ceph_assert(p_dev->get_backend_type() == backend_type_t::SEGMENTED);
     sms->add_segment_manager(static_cast<SegmentManager*>(p_dev));
   }
 
-  auto journal_type = (p_device_type == device_type_t::SSD ?
-                       journal_type_t::SEGMENTED : journal_type_t::RANDOM_BLOCK);
+  auto journal_type = p_backend_type;
   seastore_off_t roll_size;
   seastore_off_t roll_start;
   if (journal_type == journal_type_t::SEGMENTED) {