From: Zhang Song Date: Tue, 10 Jan 2023 09:01:30 +0000 (+0800) Subject: crimson/os/seastore: make segment_manager work with HDD X-Git-Tag: v19.0.0~1546^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=89939e7ad7c1dffaa1c842be601fa372d074a86a;p=ceph.git crimson/os/seastore: make segment_manager work with HDD Signed-off-by: Zhang Song --- diff --git a/src/crimson/os/seastore/segment_manager.h b/src/crimson/os/seastore/segment_manager.h index 9413e9933db7..fc743efa850b 100644 --- a/src/crimson/os/seastore/segment_manager.h +++ b/src/crimson/os/seastore/segment_manager.h @@ -58,7 +58,8 @@ struct block_sm_superblock_t { ceph_assert(first_segment_offset > tracker_offset && first_segment_offset % block_size == 0); ceph_assert(config.spec.magic != 0); - ceph_assert(config.spec.dtype == device_type_t::SSD); + ceph_assert(get_default_backend_of_device(config.spec.dtype) == + backend_type_t::SEGMENTED); ceph_assert(config.spec.id <= DEVICE_ID_MAX_VALID); if (!config.major_dev) { ceph_assert(config.secondary_devices.size() == 0); @@ -154,10 +155,6 @@ using SegmentManagerRef = std::unique_ptr; class SegmentManager : public Device { public: - device_type_t get_device_type() const final { - return device_type_t::SSD; - } - backend_type_t get_backend_type() const final { return backend_type_t::SEGMENTED; } diff --git a/src/crimson/os/seastore/segment_manager/block.h b/src/crimson/os/seastore/segment_manager/block.h index 0807534ab842..03662d5521e0 100644 --- a/src/crimson/os/seastore/segment_manager/block.h +++ b/src/crimson/os/seastore/segment_manager/block.h @@ -132,6 +132,9 @@ public: size_t len, ceph::bufferptr &out) final; + device_type_t get_device_type() const final { + return superblock.config.spec.dtype; + } size_t get_available_size() const final { return superblock.size; } diff --git a/src/crimson/os/seastore/segment_manager/ephemeral.h b/src/crimson/os/seastore/segment_manager/ephemeral.h index dc7b33f809bc..773992c7e6d7 100644 --- a/src/crimson/os/seastore/segment_manager/ephemeral.h +++ b/src/crimson/os/seastore/segment_manager/ephemeral.h @@ -69,6 +69,10 @@ class EphemeralSegmentManager final : public SegmentManager { const ephemeral_config_t config; std::optional device_config; + device_type_t get_device_type() const final { + return device_type_t::SEGMENTED_EPHEMERAL; + } + size_t get_offset(paddr_t addr) { auto& seg_addr = addr.as_seg_paddr(); return (seg_addr.get_segment_id().device_segment_id() * config.segment_size) + diff --git a/src/crimson/os/seastore/segment_manager/zns.h b/src/crimson/os/seastore/segment_manager/zns.h index a1f10d14080e..ad8c3b4fe3b6 100644 --- a/src/crimson/os/seastore/segment_manager/zns.h +++ b/src/crimson/os/seastore/segment_manager/zns.h @@ -115,6 +115,10 @@ namespace crimson::os::seastore::segment_manager::zns { size_t len, ceph::bufferptr &out) final; + device_type_t get_device_type() const final { + return device_type_t::ZNS; + } + size_t get_available_size() const final { return metadata.size; };