Removes use of const members to allow possibility of moving.
Changes strings that were passed by value to now be const ref.
Adds readability improvements to shorten repeated use of long namespace names in cpp files.
Use std::generator for initialisation of seeds instead of previous for loop
Signed-off-by: Jon Bailey <jonathan.bailey1@ibm.com>
#define dout_subsys ceph_subsys_rados
#define dout_context g_ceph_context
-std::mutex ceph::io_exerciser::data_generation::DataGenerator
- ::DataGenerationSingleton::m_mutex;
-ceph::io_exerciser::data_generation::DataGenerator::DataGenerationSingleton
- ceph::io_exerciser::data_generation::DataGenerator::DataGenerationSingleton::m_singletonInstance =
- ceph::io_exerciser::data_generation::DataGenerator::DataGenerationSingleton();
-
-std::unique_ptr<ceph::io_exerciser::data_generation::DataGenerator>
- ceph::io_exerciser::data_generation::DataGenerator::create_generator(
- ceph::io_exerciser::data_generation::GenerationType generationType,
- const ObjectModel& model)
+using DataGenerator = ceph::io_exerciser::data_generation::DataGenerator;
+using SeededRandomGenerator = ceph::io_exerciser::data_generation
+ ::SeededRandomGenerator;
+using HeaderedSeededRandomGenerator = ceph::io_exerciser::data_generation
+ ::HeaderedSeededRandomGenerator;
+
+std::mutex DataGenerator::DataGenerationSingleton::m_mutex;
+DataGenerator::DataGenerationSingleton
+ DataGenerator::DataGenerationSingleton::m_singletonInstance =
+ DataGenerator::DataGenerationSingleton();
+
+std::unique_ptr<DataGenerator> DataGenerator::create_generator(
+ GenerationType generationType, const ObjectModel& model)
{
switch(generationType)
{
return nullptr;
}
-ceph::io_exerciser::data_generation::DataGenerator
- ::DataGenerationSingleton::DataGenerationSingleton()
+DataGenerator::DataGenerationSingleton::DataGenerationSingleton()
{
m_created = false;
}
-ceph::io_exerciser::data_generation::DataGenerator
- ::DataGenerationSingleton::DataGenerationSingleton(uint64_t unique_id)
+DataGenerator::DataGenerationSingleton
+ ::DataGenerationSingleton(uint64_t unique_id)
{
m_uniqueId = unique_id;
m_created = true;
}
-const ceph::io_exerciser::data_generation
- ::DataGenerator::DataGenerationSingleton&
- ceph::io_exerciser::data_generation::DataGenerator
- ::DataGenerationSingleton::createSpecificInstance(uint64_t unique_id)
+const DataGenerator::DataGenerationSingleton&
+DataGenerator::DataGenerationSingleton::createSpecificInstance(uint64_t unique_id)
{
std::scoped_lock lock(m_mutex);
ceph_assert(!m_singletonInstance.m_created);
return m_singletonInstance;
}
-const ceph::io_exerciser::data_generation::DataGenerator::DataGenerationSingleton&
- ceph::io_exerciser::data_generation::DataGenerator
- ::DataGenerationSingleton::getInstance()
+const DataGenerator::DataGenerationSingleton&
+ DataGenerator::DataGenerationSingleton::getInstance()
{
if (!m_singletonInstance.m_created)
{
return m_singletonInstance;
}
-const uint64_t ceph::io_exerciser::data_generation::DataGenerator
- ::DataGenerationSingleton::getUniqueId()
+const uint64_t DataGenerator::DataGenerationSingleton::getUniqueId()
{
return getInstance().m_uniqueId;
}
-void ceph::io_exerciser::data_generation
- ::DataGenerator::generate_wrong_data(uint64_t offset, uint64_t length,
- ceph::bufferlist& retlist)
+void DataGenerator::generate_wrong_data(uint64_t offset, uint64_t length,
+ bufferlist& retlist)
{
uint64_t block_size = m_model.get_block_size();
char buffer[block_size];
}
}
-bool ceph::io_exerciser::data_generation
- ::DataGenerator::validate(ceph::bufferlist& bufferlist, uint64_t offset, uint64_t length)
+bool DataGenerator::validate(bufferlist& bufferlist, uint64_t offset, uint64_t length)
{
ceph::bufferlist comparison_list;
generate_data(offset, length, comparison_list);
#include <bitset>
-ceph::bufferptr ceph::io_exerciser::data_generation
- ::SeededRandomGenerator::generate_block(uint64_t block_offset)
+ceph::bufferptr SeededRandomGenerator::generate_block(uint64_t block_offset)
{
uint64_t block_size = m_model.get_block_size();
char buffer[block_size];
return ceph::bufferptr(buffer, block_size);
}
-void ceph::io_exerciser::data_generation
- ::SeededRandomGenerator::generate_data(uint64_t offset, uint64_t length, ceph::bufferlist& retlist)
+void SeededRandomGenerator::generate_data(uint64_t offset, uint64_t length,
+ bufferlist& retlist)
{
ceph_assert(retlist.length() == 0);
}
}
-ceph::bufferptr ceph::io_exerciser::data_generation
- ::HeaderedSeededRandomGenerator::generate_block(uint64_t block_offset)
+ceph::bufferptr HeaderedSeededRandomGenerator::generate_block(uint64_t block_offset)
{
UniqueIdBytes unique_run_id = DataGenerator::DataGenerationSingleton::getUniqueId();
SeedBytes seed = m_model.get_seed(block_offset);
return bufferptr;
}
-void ceph::io_exerciser::data_generation
- ::HeaderedSeededRandomGenerator::generate_wrong_data(uint64_t offset,
- uint64_t length,
- ceph::bufferlist& retlist)
+void HeaderedSeededRandomGenerator::generate_wrong_data(uint64_t offset,
+ uint64_t length,
+ bufferlist& retlist)
{
ceph_assert(retlist.length() == 0);
ceph_assert(m_model.get_block_size() >= headerLength());
}
}
-const ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator::UniqueIdBytes
- ceph::io_exerciser::data_generation
- ::HeaderedSeededRandomGenerator::readUniqueRunId(uint64_t block_offset,
- const ceph::bufferlist& bufferlist)
+const HeaderedSeededRandomGenerator::UniqueIdBytes
+ HeaderedSeededRandomGenerator::readUniqueRunId(uint64_t block_offset,
+ const bufferlist& bufferlist)
{
UniqueIdBytes read_unique_run_id = 0;
std::memcpy(&read_unique_run_id,
return read_unique_run_id;
}
-const ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator::SeedBytes
- ceph::io_exerciser::data_generation
- ::HeaderedSeededRandomGenerator::readSeed(uint64_t block_offset,
- const ceph::bufferlist& bufferlist)
+const HeaderedSeededRandomGenerator::SeedBytes
+ HeaderedSeededRandomGenerator::readSeed(uint64_t block_offset,
+ const bufferlist& bufferlist)
{
SeedBytes read_seed = 0;
std::memcpy(&read_seed,
return read_seed;
}
-const ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator::TimeBytes
- ceph::io_exerciser::data_generation
- ::HeaderedSeededRandomGenerator::readDateTime(uint64_t block_offset,
- const ceph::bufferlist& bufferlist)
+const HeaderedSeededRandomGenerator::TimeBytes
+ HeaderedSeededRandomGenerator::readDateTime(uint64_t block_offset,
+ const bufferlist& bufferlist)
{
TimeBytes read_time = 0;
std::memcpy(&read_time,
return read_time;
}
-bool ceph::io_exerciser::data_generation
- ::HeaderedSeededRandomGenerator::validate(ceph::bufferlist& bufferlist,
- uint64_t offset, uint64_t length)
+bool HeaderedSeededRandomGenerator::validate(bufferlist& bufferlist,
+ uint64_t offset, uint64_t length)
{
std::vector<uint64_t> invalid_block_offsets;
return invalid_block_offsets.empty();
}
-bool ceph::io_exerciser::data_generation
- ::HeaderedSeededRandomGenerator::validate_block(uint64_t block_offset,
- const char* buffer_start)
+bool HeaderedSeededRandomGenerator::validate_block(uint64_t block_offset,
+ const char* buffer_start)
{
// We validate the block matches what we generate byte for byte, however we ignore the time section of the header
ceph::bufferptr bufferptr = generate_block(block_offset);
return valid;
}
-const ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator::ErrorType
- ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator
- ::getErrorTypeForBlock(uint64_t read_offset, uint64_t block_offset,
- const ceph::bufferlist& bufferlist)
+const HeaderedSeededRandomGenerator::ErrorType
+ HeaderedSeededRandomGenerator::getErrorTypeForBlock(uint64_t read_offset,
+ uint64_t block_offset,
+ const bufferlist& bufferlist)
{
try
{
return ErrorType::UNKNOWN;
}
-void ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator
+void HeaderedSeededRandomGenerator
::printDebugInformationForBlock(uint64_t read_offset, uint64_t block_offset,
- const ceph::bufferlist& bufferlist)
+ const bufferlist& bufferlist)
{
ErrorType blockError = getErrorTypeForBlock(read_offset, block_offset, bufferlist);
dout(0) << ss.str() << dendl;
}
-void ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator
+void HeaderedSeededRandomGenerator
::printDebugInformationForRange(uint64_t read_offset,
uint64_t start_block_offset,
uint64_t range_length_in_blocks,
ErrorType rangeError,
- const ceph::bufferlist& bufferlist)
+ const bufferlist& bufferlist)
{
switch(rangeError)
{
}
}
-void ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator
+void HeaderedSeededRandomGenerator
::printDebugInformationForRunIdMismatchRange(uint64_t read_offset,
uint64_t start_block_offset,
uint64_t range_length_in_blocks,
- const ceph::bufferlist& bufferlist)
+ const bufferlist& bufferlist)
{
uint64_t range_start = start_block_offset;
uint64_t range_length = 0;
}
}
-void ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator
+void HeaderedSeededRandomGenerator
::printDebugInformationForSeedMismatchRange(uint64_t read_offset,
uint64_t start_block_offset,
uint64_t range_length_in_blocks,
- const ceph::bufferlist& bufferlist)
+ const bufferlist& bufferlist)
{
uint64_t range_start = start_block_offset;
uint64_t range_length = 0;
}
}
-void ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator
+void HeaderedSeededRandomGenerator
::printDebugInformationDataBodyMismatchRange(uint64_t read_offset,
uint64_t start_block_offset,
uint64_t range_length_in_blocks,
- const ceph::bufferlist& bufferlist)
+ const bufferlist& bufferlist)
{
dout(0) << "Data Mismatch detected in blocks "
<< "from " << start_block_offset
}
}
-void ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator
+void HeaderedSeededRandomGenerator
::printDebugInformationCorruptRange(uint64_t read_offset,
uint64_t start_block_offset,
uint64_t range_length_in_blocks,
- const ceph::bufferlist& bufferlist)
+ const bufferlist& bufferlist)
{
dout(0) << "Data Mismatch detected in blocks "
<< "from " << start_block_offset
}
}
-void ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator
+void HeaderedSeededRandomGenerator
::printDebugInformationDataNotFoundRange(uint64_t read_offset,
uint64_t start_block_offset,
uint64_t range_length_in_blocks,
- const ceph::bufferlist& bufferlist)
+ const bufferlist& bufferlist)
{
dout(0) << "Data not found for blocks "
<< "from " << start_block_offset
}
}
-void ceph::io_exerciser::data_generation::HeaderedSeededRandomGenerator
+void HeaderedSeededRandomGenerator
::printDebugInformationForOffsets(uint64_t read_offset,
std::vector<uint64_t> offsets,
- const ceph::bufferlist& bufferlist)
+ const bufferlist& bufferlist)
{
uint64_t range_start = 0;
uint64_t range_length = 0;
#include "IoOp.h"
-ceph::io_exerciser::IoOp::IoOp( OpType op,
- uint64_t offset1, uint64_t length1,
- uint64_t offset2, uint64_t length2,
- uint64_t offset3, uint64_t length3) :
+using IoOp = ceph::io_exerciser::IoOp;
+
+IoOp::IoOp( OpType op,
+ uint64_t offset1, uint64_t length1,
+ uint64_t offset2, uint64_t length2,
+ uint64_t offset3, uint64_t length3) :
op(op),
offset1(offset1), length1(length1),
offset2(offset2), length2(length2),
}
-std::string ceph::io_exerciser::IoOp::value_to_string(uint64_t v) const
+std::string IoOp::value_to_string(uint64_t v) const
{
if (v < 1024 || (v % 1024) != 0) {
return std::to_string(v);
}
}
-std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::IoOp
+std::unique_ptr<IoOp> IoOp
::generate_done() {
return std::make_unique<IoOp>(OpType::Done);
}
-std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::IoOp
+std::unique_ptr<IoOp> IoOp
::generate_barrier() {
return std::make_unique<IoOp>(OpType::BARRIER);
}
-std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::IoOp
+std::unique_ptr<IoOp> IoOp
::generate_create(uint64_t size) {
return std::make_unique<IoOp>(OpType::CREATE,0,size);
}
-std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::IoOp
+std::unique_ptr<IoOp> IoOp
::generate_remove() {
return std::make_unique<IoOp>(OpType::REMOVE);
}
-std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::IoOp
+std::unique_ptr<IoOp> IoOp
::generate_read(uint64_t offset, uint64_t length) {
return std::make_unique<IoOp>(OpType::READ, offset, length);
}
-std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::IoOp
+std::unique_ptr<IoOp> IoOp
::generate_read2(uint64_t offset1, uint64_t length1,
uint64_t offset2, uint64_t length2) {
offset2, length2);
}
-std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::IoOp
+std::unique_ptr<IoOp> IoOp
::generate_read3(uint64_t offset1, uint64_t length1,
uint64_t offset2, uint64_t length2,
uint64_t offset3, uint64_t length3) {
offset3, length3);
}
-std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::IoOp
- ::generate_write(uint64_t offset, uint64_t length) {
-
+std::unique_ptr<IoOp> IoOp::generate_write(uint64_t offset, uint64_t length) {
return std::make_unique<IoOp>(OpType::WRITE, offset, length);
}
-std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::IoOp
- ::generate_write2(uint64_t offset1, uint64_t length1,
- uint64_t offset2, uint64_t length2) {
-
+std::unique_ptr<IoOp> IoOp::generate_write2(uint64_t offset1, uint64_t length1,
+ uint64_t offset2, uint64_t length2) {
if (offset1 < offset2) {
ceph_assert( offset1 + length1 <= offset2 );
} else {
offset2, length2);
}
-std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::IoOp
- ::generate_write3(uint64_t offset1, uint64_t length1,
- uint64_t offset2, uint64_t length2,
- uint64_t offset3, uint64_t length3) {
-
+std::unique_ptr<IoOp> IoOp::generate_write3(uint64_t offset1, uint64_t length1,
+ uint64_t offset2, uint64_t length2,
+ uint64_t offset3, uint64_t length3) {
if (offset1 < offset2) {
ceph_assert( offset1 + length1 <= offset2 );
} else {
offset3, length3);
}
-bool ceph::io_exerciser::IoOp::done() {
+bool IoOp::done() {
return (op == OpType::Done);
}
-std::string ceph::io_exerciser::IoOp::to_string(uint64_t block_size) const
+std::string IoOp::to_string(uint64_t block_size) const
{
switch (op) {
case OpType::Done:
#include "IoSequence.h"
-ceph::io_exerciser::IoSequence::IoSequence(std::pair<int,int> obj_size_range,
+using IoSequence = ceph::io_exerciser::IoSequence;
+
+IoSequence::IoSequence(std::pair<int,int> obj_size_range,
int seed) :
min_obj_size(obj_size_range.first), max_obj_size(obj_size_range.second),
create(true), barrier(false), done(false), remove(false),
rng.seed(seed);
}
-std::unique_ptr<ceph::io_exerciser::IoSequence>
- ceph::io_exerciser::IoSequence::generate_sequence
- (
- Sequence s,
- std::pair<int,int> obj_size_range,
- int seed
- )
+std::unique_ptr<IoSequence> IoSequence::generate_sequence(Sequence s,
+ std::pair<int,int> obj_size_range,
+ int seed)
{
switch (s) {
case SEQUENCE_SEQ0:
return nullptr;
}
-int ceph::io_exerciser::IoSequence::get_step() const
+int IoSequence::get_step() const
{
return step;
}
-int ceph::io_exerciser::IoSequence::get_seed() const
+int IoSequence::get_seed() const
{
return seed;
}
-void ceph::io_exerciser::IoSequence::set_min_object_size(uint64_t size)
+void IoSequence::set_min_object_size(uint64_t size)
{
min_obj_size = size;
if (obj_size < size) {
}
}
-void ceph::io_exerciser::IoSequence::set_max_object_size(uint64_t size)
+void IoSequence::set_max_object_size(uint64_t size)
{
max_obj_size = size;
if (obj_size > size) {
}
}
-void ceph::io_exerciser::IoSequence::select_random_object_size()
+void IoSequence::select_random_object_size()
{
if (max_obj_size != min_obj_size) {
obj_size = min_obj_size + rng(max_obj_size - min_obj_size);
}
}
-std::unique_ptr<ceph::io_exerciser::IoOp>
- ceph::io_exerciser::IoSequence::increment_object_size()
+std::unique_ptr<ceph::io_exerciser::IoOp> IoSequence::increment_object_size()
{
obj_size++;
if (obj_size > max_obj_size) {
return IoOp::generate_barrier();
}
-std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::IoSequence::next()
+std::unique_ptr<ceph::io_exerciser::IoOp> IoSequence::next()
{
step++;
if (remove) {
// vim: ts=8 sw=2 smarttab
#include "Model.h"
-ceph::io_exerciser::Model::Model(const std::string oid, uint64_t block_size) :
+using Model = ceph::io_exerciser::Model;
+
+Model::Model(const std::string& oid, uint64_t block_size) :
num_io(0),
oid(oid),
block_size(block_size)
}
-const uint64_t ceph::io_exerciser::Model::get_block_size() const
+const uint64_t Model::get_block_size() const
{
return block_size;
}
-const std::string& ceph::io_exerciser::Model::get_oid() const
+const std::string Model::get_oid() const
{
return oid;
}
-int ceph::io_exerciser::Model::get_num_io() const
+int Model::get_num_io() const
{
return num_io;
}
\ No newline at end of file
class Model
{
protected:
- int num_io;
- const std::string oid;
+ int num_io{0};
+ std::string oid;
uint64_t block_size;
public:
- Model(const std::string oid, uint64_t block_size);
+ Model(const std::string& oid, uint64_t block_size);
virtual ~Model() = default;
virtual bool readyForIoOp(IoOp& op) = 0;
virtual void applyIoOp(IoOp& op) = 0;
- const std::string& get_oid() const;
+ const std::string get_oid() const;
const uint64_t get_block_size() const;
int get_num_io() const;
};
#include "ObjectModel.h"
-ceph::io_exerciser::ObjectModel::ObjectModel(const std::string oid, uint64_t block_size, int seed) :
+#include <algorithm>
+#include <execution>
+#include <iterator>
+
+using ObjectModel = ceph::io_exerciser::ObjectModel;
+
+ObjectModel::ObjectModel(const std::string& oid, uint64_t block_size, int seed) :
Model(oid, block_size), created(false)
{
rng.seed(seed);
}
-int ceph::io_exerciser::ObjectModel::get_seed(uint64_t offset) const
+int ObjectModel::get_seed(uint64_t offset) const
{
ceph_assert(offset < contents.size());
return contents[offset];
}
-std::vector<int> ceph::io_exerciser::ObjectModel::get_seed_offsets(int seed) const
+std::vector<int> ObjectModel::get_seed_offsets(int seed) const
{
std::vector<int> offsets;
for (size_t i = 0; i < contents.size(); i++)
return offsets;
}
-std::string ceph::io_exerciser::ObjectModel::to_string(int mask) const
+std::string ObjectModel::to_string(int mask) const
{
if (!created) {
return "Object does not exist";
return result;
}
-bool ceph::io_exerciser::ObjectModel::readyForIoOp(IoOp& op)
+bool ObjectModel::readyForIoOp(IoOp& op)
{
return true;
}
-void ceph::io_exerciser::ObjectModel::applyIoOp(IoOp& op)
+void ObjectModel::applyIoOp(IoOp& op)
{
+ auto generate_random = [&rng = rng]() {
+ return rng();
+ };
+
switch (op.op) {
case BARRIER:
reads.clear();
ceph_assert(writes.empty());
created = true;
contents.resize(op.length1);
- for (uint64_t i = 0; i < contents.size(); i++) {
- contents[i] = rng();
- }
+ std::generate(std::execution::seq, contents.begin(), contents.end(),
+ generate_random);
break;
case REMOVE:
reads.union_insert(op.offset1, op.length1);
num_io++;
break;
-
+
case WRITE3:
ceph_assert(created);
// Not allowed: write overlapping with parallel read or write
ceph_assert(!reads.intersects(op.offset3, op.length3));
ceph_assert(!writes.intersects(op.offset3, op.length3));
writes.union_insert(op.offset3, op.length3);
- for (uint64_t i = op.offset3; i < op.offset3 + op.length3; i++) {
- ceph_assert(i < contents.size());
- contents[i] = rng();
- }
+ ceph_assert(op.offset3 + op.length3 <= contents.size());
+ std::generate(std::execution::seq,
+ std::next(contents.begin(), op.offset3),
+ std::next(contents.begin(), op.offset3 + op.length3),
+ generate_random);
[[fallthrough]];
case WRITE2:
ceph_assert(!reads.intersects(op.offset2, op.length2));
ceph_assert(!writes.intersects(op.offset2, op.length2));
writes.union_insert(op.offset2, op.length2);
- for (uint64_t i = op.offset2; i < op.offset2 + op.length2; i++) {
- ceph_assert(i < contents.size());
- contents[i] = rng();
- }
+ ceph_assert(op.offset2 + op.length2 <= contents.size());
+ std::generate(std::execution::seq,
+ std::next(contents.begin(), op.offset2),
+ std::next(contents.begin(), op.offset2 + op.length2),
+ generate_random);
[[fallthrough]];
-
+
case WRITE:
ceph_assert(created);
// Not allowed: write overlapping with parallel read or write
ceph_assert(!reads.intersects(op.offset1, op.length1));
ceph_assert(!writes.intersects(op.offset1, op.length1));
writes.union_insert(op.offset1, op.length1);
- for (uint64_t i = op.offset1; i < op.offset1 + op.length1; i++) {
- ceph_assert(i < contents.size());
- contents[i] = rng();
- }
+ ceph_assert(op.offset1 + op.length1 <= contents.size());
+ std::generate(std::execution::seq,
+ std::next(contents.begin(), op.offset1),
+ std::next(contents.begin(), op.offset1 + op.length1),
+ generate_random);
num_io++;
break;
default:
break;
}
}
-
-void ceph::io_exerciser::ObjectModel::encode(ceph::buffer::list& bl) const {
+
+void ObjectModel::encode(ceph::buffer::list& bl) const {
ENCODE_START(1, 1, bl);
encode(created, bl);
if (created) {
encode(contents, bl);
}
ENCODE_FINISH(bl);
-}
+}
-void ceph::io_exerciser::ObjectModel::decode(ceph::buffer::list::const_iterator& bl) {
+void ObjectModel::decode(ceph::buffer::list::const_iterator& bl) {
DECODE_START(1, bl);
DECODE_OLDEST(1);
decode(created, bl);
interval_set<uint64_t> reads;
interval_set<uint64_t> writes;
public:
- ObjectModel(const std::string oid, uint64_t block_size, int seed);
+ ObjectModel(const std::string& oid, uint64_t block_size, int seed);
int get_seed(uint64_t offset) const;
std::vector<int> get_seed_offsets(int seed) const;
#include "DataGenerator.h"
-ceph::io_exerciser::RadosIo::RadosIo(librados::Rados& rados,
+using RadosIo = ceph::io_exerciser::RadosIo;
+
+RadosIo::RadosIo(librados::Rados& rados,
boost::asio::io_context& asio,
- const std::string pool,
- const std::string oid,
+ const std::string& pool,
+ const std::string& oid,
uint64_t block_size,
int seed,
int threads,
allow_ec_overwrites(true);
}
-ceph::io_exerciser::RadosIo::~RadosIo()
+RadosIo::~RadosIo()
{
}
-void ceph::io_exerciser::RadosIo::start_io()
+void RadosIo::start_io()
{
std::lock_guard l(lock);
outstanding_io++;
}
-void ceph::io_exerciser::RadosIo::finish_io()
+void RadosIo::finish_io()
{
std::lock_guard l(lock);
ceph_assert(outstanding_io > 0);
cond.notify_all();
}
-void ceph::io_exerciser::RadosIo::wait_for_io(int count)
+void RadosIo::wait_for_io(int count)
{
std::unique_lock l(lock);
while (outstanding_io > count) {
}
}
-void ceph::io_exerciser::RadosIo::allow_ec_overwrites(bool allow)
+void RadosIo::allow_ec_overwrites(bool allow)
{
int rc;
bufferlist inbl, outbl;
ceph_assert(rc == 0);
}
-ceph::io_exerciser::RadosIo::AsyncOpInfo::AsyncOpInfo(
- uint64_t offset1, uint64_t length1,
- uint64_t offset2, uint64_t length2,
- uint64_t offset3, uint64_t length3 ) :
+RadosIo::AsyncOpInfo::AsyncOpInfo(uint64_t offset1, uint64_t length1,
+ uint64_t offset2, uint64_t length2,
+ uint64_t offset3, uint64_t length3 ) :
offset1(offset1), length1(length1),
offset2(offset2), length2(length2),
offset3(offset3), length3(length3)
}
-bool ceph::io_exerciser::RadosIo::readyForIoOp(IoOp &op)
+bool RadosIo::readyForIoOp(IoOp &op)
{
ceph_assert(lock.is_locked_by_me()); //Must be called with lock held
if (!om->readyForIoOp(op)) {
}
}
-void ceph::io_exerciser::RadosIo::applyIoOp(IoOp &op)
+void RadosIo::applyIoOp(IoOp &op)
{
std::shared_ptr<AsyncOpInfo> op_info;
boost::asio::io_context& asio;
std::unique_ptr<ObjectModel> om;
std::unique_ptr<ceph::io_exerciser::data_generation::DataGenerator> db;
- const std::string pool;
+ std::string pool;
int threads;
ceph::mutex& lock;
ceph::condition_variable& cond;
public:
RadosIo(librados::Rados& rados,
boost::asio::io_context& asio,
- const std::string pool,
- const std::string oid,
+ const std::string& pool,
+ const std::string& oid,
uint64_t block_size,
int seed,
int threads,