Added the pool name, test name and test step to the error message.
Fixes: https://tracker.ceph.com/issues/73534
Signed-off-by: Matty Williams <Matty.Williams@ibm.com>
#include <stdexcept>
#include "ObjectModel.h"
+#include "IoSequence.h"
#include "common/debug.h"
#include "common/dout.h"
#include "fmt/format.h"
}
bool DataGenerator::validate(bufferlist& bufferlist, uint64_t offset,
- uint64_t length) {
+ uint64_t length, std::string_view pool,
+ ceph::io_exerciser::Sequence curseq,
+ std::unique_ptr<ceph::io_exerciser::IoSequence> seq) {
return bufferlist.contents_equal(generate_data(offset, length));
}
return read_time;
}
-bool HeaderedSeededRandomGenerator::validate(bufferlist& bufferlist,
- uint64_t offset, uint64_t length) {
+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) {
std::vector<uint64_t> invalid_block_offsets;
for (uint64_t block_offset = offset; block_offset < offset + length;
if (!invalid_block_offsets.empty()) {
dout(0) << "Miscompare for read of " << m_model.get_primary_oid() <<
- " offset=" << offset << " length=" << length << dendl;
+ " offset=" << offset << " length=" << length << " in pool " << pool <<
+ ". This occured in test " << curseq << " step " << seq->get_step() << dendl;
printDebugInformationForOffsets(offset, invalid_block_offsets, bufferlist);
}
#include <random>
#include "ObjectModel.h"
+#include "IoSequence.h"
#include "include/buffer.h"
/* Overview
GenerationType generatorType, const ObjectModel& model);
virtual bufferlist generate_data(uint64_t length, uint64_t offset) = 0;
virtual bool validate(bufferlist& bufferlist, uint64_t offset,
- uint64_t length);
+ uint64_t length, std::string_view pool,
+ ceph::io_exerciser::Sequence curseq,
+ std::unique_ptr<ceph::io_exerciser::IoSequence> seq);
// Used for testing debug outputs from data generation
virtual bufferlist generate_wrong_data(uint64_t offset, uint64_t length);
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) override;
+ uint64_t length, std::string_view pool, ceph::io_exerciser::Sequence curseq,
+ std::unique_ptr<ceph::io_exerciser::IoSequence> seq) override;
private:
using UniqueIdBytes = uint64_t;
#include "DataGenerator.h"
#include "IoOp.h"
#include "common/ceph_json.h"
+#include "common/io_exerciser/IoSequence.h"
#include "common/json/OSDStructures.h"
#include "librados/librados_asio.h"
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, bool delete_objects)
+ bool ec_optimizations, ceph::io_exerciser::Sequence curseq,
+ std::unique_ptr<ceph::io_exerciser::IoSequence> seq, bool delete_objects)
: Model(primary_oid, secondary_oid, block_size, delete_objects),
rados(rados),
asio(asio),
threads(threads),
lock(lock),
cond(cond),
- outstanding_io(0) {
+ outstanding_io(0),
+ curseq(curseq),
+ seq(seq) {
int rc;
rc = rados.ioctx_create(pool.c_str(), io);
ceph_assert(rc == 0);
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]));
+ op_info->length[i], pool, curseq, seq));
}
finish_io();
};
#pragma once
#include "ObjectModel.h"
+#include "common/io_exerciser/IoSequence.h"
#include "erasure-code/consistency/ConsistencyChecker.h"
#include "librados/AioCompletionImpl.h"
#include "common/ceph_mutex.h"
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();
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, bool delete_objects = true);
+ bool ec_optimizations, ceph::io_exerciser::Sequence curseq,
+ std::unique_ptr<ceph::io_exerciser::IoSequence> seq, bool delete_objects = true);
~RadosIo();