From: Alex Ainscow Date: Thu, 5 Feb 2026 15:02:31 +0000 (+0000) Subject: osd: Encode shard mappings. X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e70c82af859077f45fc665dccd5ac6c6a23eab05;p=ceph-ci.git osd: Encode shard mappings. The split ops code will need to know how "raw" shards map to the actual shards. This change add the data to the pool configuration. Signed-off-by: Alex Ainscow --- diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 91adfdd40f6..b0c6b0c4549 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -1987,7 +1987,7 @@ void pg_pool_t::encode(ceph::buffer::list& bl, uint64_t features) const return; } - uint8_t v = 32; + uint8_t v = 33; // NOTE: any new encoding dependencies must be reflected by // SIGNIFICANT_FEATURES if (!HAVE_SIGNIFICANT_FEATURE(features, SERVER_TENTACLE)) { @@ -2109,6 +2109,9 @@ void pg_pool_t::encode(ceph::buffer::list& bl, uint64_t features) const if (v >= 32) { encode(nonprimary_shards, bl); } + if (v >= 33) { + encode(shard_mapping, bl); + } ENCODE_FINISH(bl); } @@ -2310,6 +2313,12 @@ void pg_pool_t::decode(ceph::buffer::list::const_iterator& bl) } else { nonprimary_shards.clear(); } + + if (struct_v >= 33) { + decode(shard_mapping, bl); + } else { + shard_mapping.clear(); + } DECODE_FINISH(bl); calc_pg_masks(); calc_grade_table(); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 28f37d0645a..bfcbc1a71cd 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -1747,6 +1747,7 @@ public: private: std::vector grade_table; + std::vector shard_mapping; // Used by EC direct reads. public: uint32_t get_grade(unsigned i) const { @@ -1964,6 +1965,17 @@ public: return !nonprimary_shards.empty() && nonprimary_shards.contains(shard); } + void set_shard_mapping(std::vector && mapping) { + shard_mapping = mapping; + } + + shard_id_t get_shard(raw_shard_id_t raw) const { + if (shard_mapping.size() == 0) { + return shard_id_t((int)raw); + } + return shard_mapping[(int)raw]; + } + void encode(ceph::buffer::list& bl, uint64_t features) const; void decode(ceph::buffer::list::const_iterator& bl);