]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore: cleanup, reuse device_spec/config_t
authorYingxin Cheng <yingxin.cheng@intel.com>
Fri, 8 Apr 2022 03:50:10 +0000 (11:50 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Wed, 13 Apr 2022 05:17:11 +0000 (13:17 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/device.cc
src/crimson/os/seastore/device.h
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/segment_manager.cc
src/crimson/os/seastore/segment_manager.h
src/crimson/os/seastore/segment_manager/block.cc
src/crimson/os/seastore/segment_manager/block.h

index 3997216fc0ccfdede763358033f939d831dc4cde..c1b5617206a26da74ab9876f935c04610a1c6e60 100644 (file)
@@ -11,8 +11,8 @@ std::ostream& operator<<(std::ostream& out, const device_spec_t& ds)
 {
   return out << "device_spec("
              << "magic=" << ds.magic
-             << ", device_type=" << ds.dtype
-             << ", device_id=" << device_id_printer_t{ds.id}
+             << ", dtype=" << ds.dtype
+             << ", id=" << device_id_printer_t{ds.id}
              << ")";
 }
 
@@ -20,13 +20,12 @@ std::ostream& operator<<(std::ostream& out, const device_config_t& conf)
 {
   out << "device_config_t("
       << "major_dev=" << conf.major_dev
-      << ", magic=" << conf.magic
-      << ", device_type=" << conf.dtype
-      << ", device_id=" << device_id_printer_t{conf.device_id}
+      << ", spec=" << conf.spec
       << ", meta=" << conf.meta
       << ", secondary(";
   for (const auto& [k, v] : conf.secondary_devices) {
-    out << std::to_string(k) << ": " << v;
+    out << device_id_printer_t{k}
+        << ": " << v;
   }
   return out << "))";
 }
index 3b365eb7dcef368c78dcd72e97d7d1ea1c501a09..e3ad303c1461a8d379d0ea6ced89e261d73853a5 100644 (file)
@@ -15,9 +15,9 @@ namespace crimson::os::seastore {
 using magic_t = uint64_t;
 
 struct device_spec_t{
-  magic_t magic;
-  device_type_t dtype;
-  device_id_t id;
+  magic_t magic = 0;
+  device_type_t dtype = device_type_t::NONE;
+  device_id_t id = DEVICE_ID_NULL;
   DENC(device_spec_t, v, p) {
     DENC_START(1, 1, p);
     denc(v.magic, p);
@@ -34,11 +34,17 @@ using secondary_device_set_t =
 
 struct device_config_t {
   bool major_dev = false;
-  magic_t magic = 0;
-  device_type_t dtype = device_type_t::NONE;
-  device_id_t device_id = DEVICE_ID_NULL;
+  device_spec_t spec;
   seastore_meta_t meta;
   secondary_device_set_t secondary_devices;
+  DENC(device_config_t, v, p) {
+    DENC_START(1, 1, p);
+    denc(v.major_dev, p);
+    denc(v.spec, p);
+    denc(v.meta, p);
+    denc(v.secondary_devices, p);
+    DENC_FINISH(p);
+  }
 };
 
 std::ostream& operator<<(std::ostream&, const device_config_t&);
@@ -113,6 +119,5 @@ public:
 
 }
 
-WRITE_CLASS_DENC(
-  crimson::os::seastore::device_spec_t
-)
+WRITE_CLASS_DENC_BOUNDED(crimson::os::seastore::device_spec_t)
+WRITE_CLASS_DENC(crimson::os::seastore::device_config_t)
index 56e31ac19e01ce082ee64353563405328997a350..916fe7a40df5cb71e220601015db2a23b2a2ceb4 100644 (file)
@@ -297,9 +297,10 @@ SeaStore::mkfs_ertr::future<> SeaStore::mkfs(uuid_d new_osd_fsid)
                     device_spec_t{magic, dtype, (device_id_t)id});
                   return sec_dev->mkfs(device_config_t{
                       false,
-                      magic,
-                      dtype,
-                      (device_id_t)id,
+                      device_spec_t{
+                        magic,
+                        dtype,
+                        (device_id_t)id},
                       seastore_meta_t{new_osd_fsid},
                       secondary_device_set_t()}
                   ).safe_then([this, sec_dev=std::move(sec_dev), id]() mutable {
@@ -318,9 +319,10 @@ SeaStore::mkfs_ertr::future<> SeaStore::mkfs(uuid_d new_osd_fsid)
           return device->mkfs(
             device_config_t{
               true,
-              (magic_t)std::rand(),
-              device_type_t::SEGMENTED,
-              0,
+              device_spec_t{
+                (magic_t)std::rand(),
+                device_type_t::SEGMENTED,
+                0},
               seastore_meta_t{new_osd_fsid},
               sds}
           );
index 4d445313a01f3bd03b9873c7ddca9d1126ab6cf5..6fc8f0f3e192262237c70e8b4e9c557ac4c98155 100644 (file)
@@ -31,16 +31,9 @@ std::ostream& operator<<(std::ostream& out, const block_sm_superblock_t& sb)
       << ", segments=" << sb.segments
       << ", tracker_offset=" << sb.tracker_offset
       << ", first_segment_offset=" << sb.first_segment_offset
-      << ", major_dev=" << sb.major_dev
-      << ", magic=" << sb.magic
-      << ", device_type=" << sb.dtype
-      << ", device_id=" << std::to_string(sb.device_id)
-      << ", meta=" << sb.meta
-      << ", secondary(";
-  for (const auto& [k, v] : sb.secondary_devices) {
-    out << std::to_string(k) << ": " << v;
-  }
-  return out << "))";
+      << ", config=" << sb.config
+      << ")";
+  return out;
 }
 
 std::ostream& operator<<(std::ostream &out, Segment::segment_state_t s)
index 44d249dcac9fc8e846398fafe2e5a5d3f363e741..b565125c50bb7b27ba9e1aaf6ce5011f3554ff2b 100644 (file)
@@ -29,14 +29,8 @@ struct block_sm_superblock_t {
   uint64_t tracker_offset = 0;
   uint64_t first_segment_offset = 0;
 
-  bool major_dev = false;
-  magic_t magic = 0;
-  device_type_t dtype = device_type_t::NONE;
-  device_id_t device_id = DEVICE_ID_NULL;
+  device_config_t config;
 
-  seastore_meta_t meta;
-
-  secondary_device_set_t secondary_devices;
   DENC(block_sm_superblock_t, v, p) {
     DENC_START(1, 1, p);
     denc(v.size, p);
@@ -45,14 +39,7 @@ struct block_sm_superblock_t {
     denc(v.segments, p);
     denc(v.tracker_offset, p);
     denc(v.first_segment_offset, p);
-    denc(v.meta, p);
-    denc(v.major_dev, p);
-    denc(v.magic, p);
-    denc(v.dtype, p);
-    denc(v.device_id, p);
-    if (v.major_dev) {
-      denc(v.secondary_devices, p);
-    }
+    denc(v.config, p);
     DENC_FINISH(p);
   }
 
@@ -67,11 +54,14 @@ struct block_sm_superblock_t {
                 tracker_offset % block_size == 0);
     ceph_assert(first_segment_offset > tracker_offset &&
                 first_segment_offset % block_size == 0);
-    ceph_assert(magic != 0);
-    ceph_assert(dtype == device_type_t::SEGMENTED);
-    ceph_assert(device_id <= DEVICE_ID_MAX_VALID);
-    for (const auto& [k, v] : secondary_devices) {
-      ceph_assert(k != device_id);
+    ceph_assert(config.spec.magic != 0);
+    ceph_assert(config.spec.dtype == device_type_t::SEGMENTED);
+    ceph_assert(config.spec.id <= DEVICE_ID_MAX_VALID);
+    if (!config.major_dev) {
+      ceph_assert(config.secondary_devices.size() == 0);
+    }
+    for (const auto& [k, v] : config.secondary_devices) {
+      ceph_assert(k != config.spec.id);
       ceph_assert(k <= DEVICE_ID_MAX_VALID);
       ceph_assert(k == v.id);
       ceph_assert(v.magic != 0);
index 65403cdcd2f594800c325d46c61a98116533452d..124be2cbdccbeb2f621bf6328994cbc97eb46253 100644 (file)
@@ -234,12 +234,7 @@ block_sm_superblock_t make_superblock(
     segments,
     tracker_off,
     first_seg_off,
-    sm_config.major_dev,
-    sm_config.magic,
-    sm_config.dtype,
-    sm_config.device_id,
-    sm_config.meta,
-    std::move(sm_config.secondary_devices)
+    std::move(sm_config)
   };
 }
 
@@ -486,7 +481,7 @@ BlockSegmentManager::mount_ret BlockSegmentManager::mount()
     auto sd = p.second;
     return read_superblock(device, sd);
   }).safe_then([=](auto sb) {
-    set_device_id(sb.device_id);
+    set_device_id(sb.config.spec.id);
     INFO("D{} read {}", get_device_id(), sb);
     sb.validate();
     superblock = sb;
@@ -520,7 +515,7 @@ BlockSegmentManager::mkfs_ret BlockSegmentManager::mkfs(
   device_config_t sm_config)
 {
   LOG_PREFIX(BlockSegmentManager::mkfs);
-  set_device_id(sm_config.device_id);
+  set_device_id(sm_config.spec.id);
   INFO("D{} path={}, {}", get_device_id(), device_path, sm_config);
   return seastar::do_with(
     seastar::file{},
index 363c7c5f23de088a10e24f95803482e2a69ad30d..6150f8c177dd9490d737ed2490aef958b5d88e12 100644 (file)
@@ -146,7 +146,7 @@ public:
     return device_id;
   }
   secondary_device_set_t& get_secondary_devices() final {
-    return superblock.secondary_devices;
+    return superblock.config.secondary_devices;
   }
   // public so tests can bypass segment interface when simpler
   Segment::write_ertr::future<> segment_write(
@@ -155,7 +155,7 @@ public:
     bool ignore_check=false);
 
   magic_t get_magic() const final {
-    return superblock.magic;
+    return superblock.config.spec.magic;
   }
 
 private:
@@ -216,7 +216,7 @@ private:
   }
 
   const seastore_meta_t &get_meta() const {
-    return superblock.meta;
+    return superblock.config.meta;
   }
 
   std::vector<segment_state_t> segment_state;