]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
io_exerciser: Fix bugs from previous commit
authorMatty Williams <Matty.Williams@ibm.com>
Tue, 14 Oct 2025 15:27:58 +0000 (16:27 +0100)
committerMatty Williams <Matty.Williams@ibm.com>
Wed, 25 Mar 2026 14:52:35 +0000 (14:52 +0000)
Current test and test step are now updated when the step changes.

Fixes: https://tracker.ceph.com/issues/73534
Signed-off-by: Matty Williams <Matty.Williams@ibm.com>
src/common/io_exerciser/DataGenerator.cc
src/common/io_exerciser/DataGenerator.h
src/common/io_exerciser/Model.cc
src/common/io_exerciser/Model.h
src/common/io_exerciser/RadosIo.cc
src/common/io_exerciser/RadosIo.h
src/test/osd/ceph_test_rados_io_sequence/ceph_test_rados_io_sequence.cc

index 53e5ada06838d5c9cea428bf3e3edacdc39b540d..f337a76d486914aa23daa942ceebd9125da78cf9 100644 (file)
@@ -52,8 +52,7 @@ bufferlist DataGenerator::generate_wrong_data(uint64_t offset,
 
 bool DataGenerator::validate(bufferlist& bufferlist, uint64_t offset,
                              uint64_t length, std::string_view pool,
-                             ceph::io_exerciser::Sequence curseq,
-                             std::unique_ptr<ceph::io_exerciser::IoSequence> seq) {
+                             ceph::io_exerciser::Sequence curseq, int step) {
   return bufferlist.contents_equal(generate_data(offset, length));
 }
 
@@ -218,7 +217,7 @@ HeaderedSeededRandomGenerator::readDateTime(uint64_t block_offset,
 bool HeaderedSeededRandomGenerator::validate(bufferlist& bufferlist, uint64_t offset, 
                                              uint64_t length, std::string_view pool,
                                              ceph::io_exerciser::Sequence curseq,
-                                             std::unique_ptr<ceph::io_exerciser::IoSequence> seq) {
+                                             int step) {
   std::vector<uint64_t> invalid_block_offsets;
 
   for (uint64_t block_offset = offset; block_offset < offset + length;
@@ -232,9 +231,9 @@ bool HeaderedSeededRandomGenerator::validate(bufferlist& bufferlist, uint64_t of
   }
 
   if (!invalid_block_offsets.empty()) {
-    dout(0) << "Miscompare for read of " << m_model.get_primary_oid() <<
-      " offset=" << offset << " length=" << length << " in pool " << pool << 
-      ". This occured in test " << curseq << " step " << seq->get_step() << dendl;
+    dout(0) << "Miscompare for read of oid=" << m_model.get_primary_oid() <<
+      " offset=" << offset << " length=" << length << " pool=" << pool << 
+      ". This occured in test=" << curseq << " step=" << step << dendl;
     printDebugInformationForOffsets(offset, invalid_block_offsets, bufferlist);
   }
 
index 59f073dc5706714847b481cc5c1c9d50b95f30e4..9a8bae7e2cca37ac7e10373ec736eb829295b6fb 100644 (file)
@@ -48,8 +48,7 @@ class DataGenerator {
   virtual bufferlist generate_data(uint64_t length, uint64_t offset) = 0;
   virtual bool validate(bufferlist& bufferlist, uint64_t offset,
                         uint64_t length, std::string_view pool,
-                        ceph::io_exerciser::Sequence curseq,
-                        std::unique_ptr<ceph::io_exerciser::IoSequence> seq);
+                        ceph::io_exerciser::Sequence curseq, int step);
 
   // Used for testing debug outputs from data generation
   virtual bufferlist generate_wrong_data(uint64_t offset, uint64_t length);
@@ -82,8 +81,8 @@ class HeaderedSeededRandomGenerator : public SeededRandomGenerator {
   bufferptr generate_block(uint64_t offset) override;
   bufferptr generate_wrong_block(uint64_t offset) override;
   bool validate(bufferlist& bufferlist, uint64_t offset,
-                uint64_t length, std::string_view pool, ceph::io_exerciser::Sequence curseq,
-                std::unique_ptr<ceph::io_exerciser::IoSequence> seq) override;
+                uint64_t length, std::string_view pool, 
+                ceph::io_exerciser::Sequence curseq, int step) override;
 
  private:
   using UniqueIdBytes = uint64_t;
index dfa113d8c34267c1981a3b26fb42f538e1453c7e..d8a51f52e95530502fb1e1bd67b99e030aeb9f92 100644 (file)
@@ -33,3 +33,8 @@ void Model::swap_primary_secondary_oid() {
 const uint64_t Model::get_block_size() const { return block_size; }
 
 int Model::get_num_io() const { return num_io; }
+
+void Model::set_test_step(ceph::io_exerciser::Sequence new_seq, int new_step) {
+  curseq = new_seq;
+  step = new_step;
+}
index 23ff35b3603b7e18043d84fbd68c327a12a2be86..173c61fb8bce41b74c06109ffbda6c0d33276670 100644 (file)
@@ -6,6 +6,7 @@
 #include <boost/asio/io_context.hpp>
 
 #include "IoOp.h"
+#include "common/io_exerciser/IoSequence.h"
 #include "common/Thread.h"
 #include "global/global_context.h"
 #include "global/global_init.h"
@@ -33,9 +34,14 @@ class Model {
   std::string primary_oid;
   std::string secondary_oid;
   uint64_t block_size;
+  ceph::io_exerciser::Sequence curseq;
+  int step;
   bool delete_objects;
   int num_objects{0};
 
+  void set_primary_oid(const std::string& new_oid);
+  void set_secondary_oid(const std::string& new_oid);
+
  public:
   Model(const std::string& primary_oid, const std::string& secondary_oid,
         uint64_t block_size, bool delete_objects);
@@ -43,6 +49,7 @@ class Model {
 
   virtual bool readyForIoOp(IoOp& op) = 0;
   virtual void applyIoOp(IoOp& op) = 0;
+  void set_test_step(ceph::io_exerciser::Sequence new_seq, int new_step);
 
   virtual void set_primary_oid(const std::string& new_oid);
   virtual void set_secondary_oid(const std::string& new_oid);
index c39ff421dee0b4e51bbacf16df0694b6e436b12b..535232100e3100edfe58a511a266f41c40209e00 100644 (file)
@@ -47,8 +47,7 @@ RadosIo::RadosIo(librados::Rados& rados, boost::asio::io_context& asio,
                  const std::string& pool, const std::string& primary_oid, const std::string& secondary_oid,
                  uint64_t block_size, int seed, int threads, ceph::mutex& lock,
                  ceph::condition_variable& cond, bool is_replicated_pool,
-                 bool ec_optimizations, ceph::io_exerciser::Sequence curseq,
-                 std::unique_ptr<ceph::io_exerciser::IoSequence> seq, bool delete_objects)
+                 bool ec_optimizations, bool delete_objects)
     : Model(primary_oid, secondary_oid, block_size, delete_objects),
       rados(rados),
       asio(asio),
@@ -59,9 +58,7 @@ RadosIo::RadosIo(librados::Rados& rados, boost::asio::io_context& asio,
       threads(threads),
       lock(lock),
       cond(cond),
-      outstanding_io(0),
-      curseq(curseq),
-      seq(seq) {
+      outstanding_io(0) {
   int rc;
   rc = rados.ioctx_create(pool.c_str(), io);
   ceph_assert(rc == 0);
@@ -264,7 +261,7 @@ void RadosIo::applyReadWriteOp(IoOp& op) {
       ceph_assert(ec == boost::system::errc::success);
       for (int i = 0; i < N; i++) {
         ceph_assert(db->validate(op_info->bufferlist[i], op_info->offset[i],
-                                 op_info->length[i], pool, curseq, seq));
+                                 op_info->length[i], pool, curseq, step));
       }
       finish_io();
     };
index 2f19f7a8d8878168d23f0b295691d384897b1537..d0b539ae3ad9b003e8197ba936c8123d682a10b1 100644 (file)
@@ -38,8 +38,6 @@ class RadosIo : public Model {
   ceph::condition_variable& cond;
   librados::IoCtx io;
   int outstanding_io;
-  ceph::io_exerciser::Sequence curseq;
-  std::unique_ptr<ceph::io_exerciser::IoSequence> seq;
 
   void start_io();
   void finish_io();
@@ -50,8 +48,7 @@ class RadosIo : public Model {
           const std::string& pool, const std::string& primary_oid, const std::string& secondary_oid,
           uint64_t block_size, int seed, int threads, ceph::mutex& lock,
           ceph::condition_variable& cond, bool is_replicated_pool,
-          bool ec_optimizations, ceph::io_exerciser::Sequence curseq,
-          std::unique_ptr<ceph::io_exerciser::IoSequence> seq, bool delete_objects = true);
+          bool ec_optimizations, bool delete_objects = true);
 
   ~RadosIo();
 
index 709f6e5e6932e14433b6fbd92d5ea711ef964bb8..1c7bc9b68885f7521c70a1daded1747391d8803b 100644 (file)
@@ -1072,6 +1072,7 @@ ceph::io_sequence::tester::TestObject::TestObject(
   }
 
   op = seq->next();
+  exerciser_model->set_test_step(curseq, seq->get_step());
   done = false;
   dout(0) << "== " << exerciser_model->get_primary_oid() << " " << curseq << " "
           << seq->get_name_with_seqseed() << " ==" << dendl;
@@ -1118,6 +1119,7 @@ bool ceph::io_sequence::tester::TestObject::next() {
       op = seq->next();
     }
   }
+  exerciser_model->set_test_step(curseq, seq->get_step());
   return done;
 }