X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fcrimson%2Fos%2Fseastore%2Frandom_block_manager.h;h=d9be1b5e6d9cafafc9eeb66bc548c39b57fe6d63;hb=aee94f6923ba628a85d855d0c5316d0da78bfa2a;hp=0478f5d0e5a633efe10e2a310f4e3e45a09f73b6;hpb=27f45121cc74e31203777ad565f78d8aad9b92a2;p=ceph.git diff --git a/ceph/src/crimson/os/seastore/random_block_manager.h b/ceph/src/crimson/os/seastore/random_block_manager.h index 0478f5d0e..d9be1b5e6 100644 --- a/ceph/src/crimson/os/seastore/random_block_manager.h +++ b/ceph/src/crimson/os/seastore/random_block_manager.h @@ -22,6 +22,18 @@ namespace crimson::os::seastore { +struct rbm_shard_info_t { + std::size_t size = 0; + uint64_t start_offset = 0; + + DENC(rbm_shard_info_t, v, p) { + DENC_START(1, 1, p); + denc(v.size, p); + denc(v.start_offset, p); + DENC_FINISH(p); + } +}; + struct rbm_metadata_header_t { size_t size = 0; size_t block_size = 0; @@ -29,6 +41,8 @@ struct rbm_metadata_header_t { uint64_t journal_size = 0; checksum_t crc = 0; device_config_t config; + unsigned int shard_num = 0; + std::vector shard_infos; DENC(rbm_metadata_header_t, v, p) { DENC_START(1, 1, p); @@ -39,9 +53,28 @@ struct rbm_metadata_header_t { denc(v.journal_size, p); denc(v.crc, p); denc(v.config, p); + denc(v.shard_num, p); + denc(v.shard_infos, p); DENC_FINISH(p); } + void validate() const { + ceph_assert(shard_num == seastar::smp::count); + ceph_assert(block_size > 0); + for (unsigned int i = 0; i < seastar::smp::count; i ++) { + ceph_assert(shard_infos[i].size > block_size && + shard_infos[i].size % block_size == 0); + ceph_assert_always(shard_infos[i].size <= DEVICE_OFF_MAX); + ceph_assert(journal_size > 0 && + journal_size % block_size == 0); + ceph_assert(shard_infos[i].start_offset < size && + shard_infos[i].start_offset % block_size == 0); + } + ceph_assert(config.spec.magic != 0); + ceph_assert(get_default_backend_of_device(config.spec.dtype) == + backend_type_t::RANDOM_BLOCK); + ceph_assert(config.spec.id <= DEVICE_ID_MAX_VALID); + } }; enum class rbm_extent_state_t { @@ -127,12 +160,17 @@ seastar::future> get_rb_device(const std::string &device); std::ostream &operator<<(std::ostream &out, const rbm_metadata_header_t &header); +std::ostream &operator<<(std::ostream &out, const rbm_shard_info_t &shard); } +WRITE_CLASS_DENC_BOUNDED( + crimson::os::seastore::rbm_shard_info_t +) WRITE_CLASS_DENC_BOUNDED( crimson::os::seastore::rbm_metadata_header_t ) #if FMT_VERSION >= 90000 template<> struct fmt::formatter : fmt::ostream_formatter {}; +template<> struct fmt::formatter : fmt::ostream_formatter {}; #endif