From a4d93bb5543b8d51b79a4ad6239d3638a679f414 Mon Sep 17 00:00:00 2001 From: Connor Fawcett Date: Thu, 17 Jul 2025 02:19:16 +0100 Subject: [PATCH] Get chunk size for consistency checking from EC profile instead of command line arg Signed-off-by: Connor Fawcett --- src/erasure-code/consistency/ConsistencyChecker.cc | 5 ++--- src/erasure-code/consistency/ConsistencyChecker.h | 3 +-- src/erasure-code/consistency/RadosCommands.cc | 14 +++++++++++++- src/erasure-code/consistency/RadosCommands.h | 1 + .../consistency/ceph_ec_consistency_checker.cc | 6 ++---- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/erasure-code/consistency/ConsistencyChecker.cc b/src/erasure-code/consistency/ConsistencyChecker.cc index 1957e5263a7ee..da84ce1a8d1b8 100644 --- a/src/erasure-code/consistency/ConsistencyChecker.cc +++ b/src/erasure-code/consistency/ConsistencyChecker.cc @@ -14,8 +14,7 @@ using bufferlist = ceph::bufferlist; ConsistencyChecker::ConsistencyChecker(librados::Rados &rados, boost::asio::io_context& asio, - const std::string& pool_name, - int stripe_unit) : + const std::string& pool_name) : rados(rados), asio(asio), reader(ceph::consistency::ECReader(rados, asio, pool_name)), @@ -24,7 +23,7 @@ ConsistencyChecker::ConsistencyChecker(librados::Rados &rados, commands.get_ec_profile_for_pool(pool_name), commands.get_pool_allow_ec_optimizations(pool_name)), encoder(ceph::consistency::ECEncoderSwitch(pool.get_ec_profile(), - stripe_unit, + commands.get_ec_chunk_size_for_pool(pool_name), commands.get_pool_allow_ec_optimizations(pool_name) )) {} diff --git a/src/erasure-code/consistency/ConsistencyChecker.h b/src/erasure-code/consistency/ConsistencyChecker.h index dd2ee657d901c..666ca958d3685 100644 --- a/src/erasure-code/consistency/ConsistencyChecker.h +++ b/src/erasure-code/consistency/ConsistencyChecker.h @@ -52,8 +52,7 @@ class ConsistencyChecker { public: ConsistencyChecker(librados::Rados& rados, boost::asio::io_context& asio, - const std::string& pool_name, - int stripe_unit); + const std::string& pool_name); void queue_ec_read(Read read); bool check_object_consistency(const std::string& oid, const bufferlist& inbl); diff --git a/src/erasure-code/consistency/RadosCommands.cc b/src/erasure-code/consistency/RadosCommands.cc index 145ce35e7a298..8fb97587f1f8a 100644 --- a/src/erasure-code/consistency/RadosCommands.cc +++ b/src/erasure-code/consistency/RadosCommands.cc @@ -137,7 +137,19 @@ ceph::ErasureCodeProfile RadosCommands::get_ec_profile_for_pool(const std::strin } /** - * RadosCommands the parity read inject on the acting primary + * Get chunk size for pool with the supplied name + * + * @param pool_name string Name of the pool to get chunk size of + * @return int the chunk size of the pool + */ +int RadosCommands::get_ec_chunk_size_for_pool(const std::string& pool_name) +{ + ceph::ErasureCodeProfile profile = get_ec_profile_for_pool(pool_name); + return (profile.contains("stripe_unit") ? std::stol(profile["stripe_unit"]) : 4096); +} + +/** + * Inject the parity read inject on the acting primary * for the specified object and pool. Assert on failure. * * @param pool_name string Name of the pool to perform inject on diff --git a/src/erasure-code/consistency/RadosCommands.h b/src/erasure-code/consistency/RadosCommands.h index e24e81e3263a8..89b7eb06f8588 100644 --- a/src/erasure-code/consistency/RadosCommands.h +++ b/src/erasure-code/consistency/RadosCommands.h @@ -24,6 +24,7 @@ class RadosCommands { std::string get_pool_ec_profile_name(const std::string& pool_name); bool get_pool_allow_ec_optimizations(const std::string& pool_name); ceph::ErasureCodeProfile get_ec_profile_for_pool(const std::string& pool_name); + int get_ec_chunk_size_for_pool(const std::string& pool_name); void inject_parity_read_on_primary_osd(const std::string& pool_name, const std::string& oid); void inject_clear_parity_read_on_primary_osd(const std::string& pool_name, diff --git a/src/erasure-code/consistency/ceph_ec_consistency_checker.cc b/src/erasure-code/consistency/ceph_ec_consistency_checker.cc index 58a3e0b1f712d..35606084b2ae4 100644 --- a/src/erasure-code/consistency/ceph_ec_consistency_checker.cc +++ b/src/erasure-code/consistency/ceph_ec_consistency_checker.cc @@ -35,8 +35,7 @@ int main(int argc, char **argv) ("oid,i", po::value(), "object io") ("blocksize,b", po::value(), "block size") ("offset,o", po::value(), "offset") - ("length,l", po::value(), "length") - ("stripeunit,s", po::value(), "stripe unit"); + ("length,l", po::value(), "length"); po::variables_map vm; std::vector unrecognized_options; @@ -62,7 +61,6 @@ int main(int argc, char **argv) auto blocksize = vm["blocksize"].as(); auto offset = vm["offset"].as(); auto length = vm["length"].as(); - auto stripe_unit = vm["stripeunit"].as(); int rc; rc = rados.init_with_context(g_ceph_context); @@ -73,7 +71,7 @@ int main(int argc, char **argv) guard.emplace(boost::asio::make_work_guard(asio)); thread = make_named_thread("io_thread",[&asio] { asio.run(); }); - auto checker = ceph::consistency::ConsistencyChecker(rados, asio, pool, stripe_unit); + auto checker = ceph::consistency::ConsistencyChecker(rados, asio, pool); checker.single_read_and_check_consistency(oid, blocksize, offset, length); checker.print_results(std::cout); -- 2.39.5