From: Zhang Song Date: Mon, 19 Sep 2022 08:33:10 +0000 (+0800) Subject: crimson/os/seastore: introduce get_backend_type to Device X-Git-Tag: v18.1.0~1136^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4f2e12f3e2134e7cb4f954aa5baad1e953e12c13;p=ceph.git crimson/os/seastore: introduce get_backend_type to Device Signed-off-by: Zhang Song --- diff --git a/src/crimson/os/seastore/device.h b/src/crimson/os/seastore/device.h index 5f0af3616d06..814413aec3ec 100644 --- a/src/crimson/os/seastore/device.h +++ b/src/crimson/os/seastore/device.h @@ -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; diff --git a/src/crimson/os/seastore/extent_placement_manager.cc b/src/crimson/os/seastore/extent_placement_manager.cc index 27a882dca8cc..8e77a6804268 100644 --- a/src/crimson/os/seastore/extent_placement_manager.cc +++ b/src/crimson/os/seastore/extent_placement_manager.cc @@ -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); } diff --git a/src/crimson/os/seastore/extent_placement_manager.h b/src/crimson/os/seastore/extent_placement_manager.h index d8ff09a11468..9307cbf506cf 100644 --- a/src/crimson/os/seastore/extent_placement_manager.h +++ b/src/crimson/os/seastore/extent_placement_manager.h @@ -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); } diff --git a/src/crimson/os/seastore/random_block_manager/rbm_device.h b/src/crimson/os/seastore/random_block_manager/rbm_device.h index 5ec9266b4a1f..d789813e179a 100644 --- a/src/crimson/os/seastore/random_block_manager/rbm_device.h +++ b/src/crimson/os/seastore/random_block_manager/rbm_device.h @@ -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; } diff --git a/src/crimson/os/seastore/segment_manager.h b/src/crimson/os/seastore/segment_manager.h index 365e09d20894..78cba8991dbb 100644 --- a/src/crimson/os/seastore/segment_manager.h +++ b/src/crimson/os/seastore/segment_manager.h @@ -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, diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index b18836c2e8e8..459ffac733fe 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -630,20 +630,18 @@ TransactionManagerRef make_transaction_manager( auto sms = std::make_unique(); 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(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(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) {