Skip to content

Commit fd3bc4c

Browse files
Merge pull request ceph#62985 from connorfawcett/wip-exerciser-consistency-2604
common/io_exerciser: Add consistency checking functionality to IO exerciser
2 parents 52768e0 + eb6278e commit fd3bc4c

File tree

17 files changed

+197
-100
lines changed

17 files changed

+197
-100
lines changed

src/common/io_exerciser/EcIoSequence.cc

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ std::unique_ptr<IoSequence> EcIoSequence::generate_sequence(
1515
Sequence sequence, std::pair<int, int> obj_size_range,
1616
std::optional<std::pair<int, int>> km,
1717
std::optional<std::pair<std::string_view, std::string_view>> mappinglayers,
18-
int seed) {
18+
int seed,
19+
bool check_consistency) {
1920
switch (sequence) {
2021
case Sequence::SEQUENCE_SEQ0:
2122
[[fallthrough]];
@@ -45,16 +46,16 @@ std::unique_ptr<IoSequence> EcIoSequence::generate_sequence(
4546
[[fallthrough]];
4647
case Sequence::SEQUENCE_SEQ14:
4748
return std::make_unique<ReadInjectSequence>(obj_size_range, seed,
48-
sequence, km, mappinglayers);
49+
sequence, km, mappinglayers, check_consistency);
4950
case Sequence::SEQUENCE_SEQ10:
50-
return std::make_unique<Seq10>(obj_size_range, seed, km, mappinglayers);
51+
return std::make_unique<Seq10>(obj_size_range, seed, km, mappinglayers, check_consistency);
5152
default:
5253
ceph_abort_msg("Unrecognised sequence");
5354
}
5455
}
5556

56-
EcIoSequence::EcIoSequence(std::pair<int, int> obj_size_range, int seed)
57-
: IoSequence(obj_size_range, seed),
57+
EcIoSequence::EcIoSequence(std::pair<int, int> obj_size_range, int seed, bool check_consistency)
58+
: IoSequence(obj_size_range, seed, check_consistency),
5859
setup_inject(false),
5960
clear_inject(false),
6061
shard_to_inject(std::nullopt) {}
@@ -172,9 +173,10 @@ ceph::io_exerciser::ReadInjectSequence::ReadInjectSequence(
172173
int seed,
173174
Sequence s,
174175
std::optional<std::pair<int, int>> km,
175-
std::optional<std::pair<std::string_view, std::string_view>> mappinglayers)
176-
: EcIoSequence(obj_size_range, seed) {
177-
child_sequence = IoSequence::generate_sequence(s, obj_size_range, seed);
176+
std::optional<std::pair<std::string_view, std::string_view>> mappinglayers,
177+
bool check_consistency)
178+
: EcIoSequence(obj_size_range, seed, check_consistency) {
179+
child_sequence = IoSequence::generate_sequence(s, obj_size_range, seed, check_consistency);
178180
select_random_data_shard_to_inject_read_error(km, mappinglayers);
179181
generate_random_read_inject_type();
180182
}
@@ -267,8 +269,9 @@ ceph::io_exerciser::ReadInjectSequence::_next() {
267269
ceph::io_exerciser::Seq10::Seq10(
268270
std::pair<int, int> obj_size_range, int seed,
269271
std::optional<std::pair<int, int>> km,
270-
std::optional<std::pair<std::string_view, std::string_view>> mappinglayers)
271-
: EcIoSequence(obj_size_range, seed),
272+
std::optional<std::pair<std::string_view, std::string_view>> mappinglayers,
273+
bool check_consistency)
274+
: EcIoSequence(obj_size_range, seed, check_consistency),
272275
offset(0),
273276
length(1),
274277
inject_error_done(false),

src/common/io_exerciser/EcIoSequence.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@ class EcIoSequence : public IoSequence {
1212
std::optional<std::pair<int, int>> km,
1313
std::optional<std::pair<std::string_view, std::string_view>>
1414
mappinglayers,
15-
int seed);
15+
int seed,
16+
bool check_consistency);
1617

1718
protected:
1819
bool setup_inject;
1920
bool clear_inject;
2021
std::optional<uint64_t> shard_to_inject;
2122
InjectOpType inject_op_type;
2223

23-
EcIoSequence(std::pair<int, int> obj_size_range, int seed);
24+
EcIoSequence(std::pair<int, int> obj_size_range, int seed, bool check_consistency);
2425

2526
// Writes cannot be sent to injected on shard zero, so selections seperated
2627
// out
@@ -50,7 +51,8 @@ class ReadInjectSequence : public EcIoSequence {
5051
std::pair<int, int> obj_size_range, int seed, Sequence s,
5152
std::optional<std::pair<int, int>> km,
5253
std::optional<std::pair<std::string_view, std::string_view>>
53-
mappinglayers);
54+
mappinglayers,
55+
bool check_consistency);
5456

5557
Sequence get_id() const override;
5658
std::string get_name() const override;
@@ -67,7 +69,8 @@ class Seq10 : public EcIoSequence {
6769
Seq10(std::pair<int, int> obj_size_range, int seed,
6870
std::optional<std::pair<int, int>> km,
6971
std::optional<std::pair<std::string_view, std::string_view>>
70-
mappinglayers);
72+
mappinglayers,
73+
bool check_consistency);
7174

7275
Sequence get_id() const override;
7376
std::string get_name() const override;

src/common/io_exerciser/IoOp.cc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ using DoneOp = ceph::io_exerciser::DoneOp;
1010
using BarrierOp = ceph::io_exerciser::BarrierOp;
1111
using CreateOp = ceph::io_exerciser::CreateOp;
1212
using RemoveOp = ceph::io_exerciser::RemoveOp;
13+
using ConsistencyOp = ceph::io_exerciser::ConsistencyOp;
1314
using SingleReadOp = ceph::io_exerciser::SingleReadOp;
1415
using DoubleReadOp = ceph::io_exerciser::DoubleReadOp;
1516
using TripleReadOp = ceph::io_exerciser::TripleReadOp;
@@ -98,6 +99,16 @@ ceph::io_exerciser::ReadWriteOp<opType, numIOs>::ReadWriteOp(
9899
}
99100
}
100101

102+
ConsistencyOp::ConsistencyOp() : TestOp<OpType::Consistency>() {}
103+
104+
std::unique_ptr<ConsistencyOp> ConsistencyOp::generate() {
105+
return std::make_unique<ConsistencyOp>();
106+
}
107+
108+
std::string ConsistencyOp::to_string(uint64_t block_size) const {
109+
return "Consistency";
110+
}
111+
101112
template <OpType opType, int numIOs>
102113
std::string ceph::io_exerciser::ReadWriteOp<opType, numIOs>::to_string(
103114
uint64_t block_size) const {

src/common/io_exerciser/IoOp.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ class RemoveOp : public TestOp<OpType::Remove> {
6161
std::string to_string(uint64_t block_size) const override;
6262
};
6363

64+
class ConsistencyOp : public TestOp<OpType::Consistency> {
65+
public:
66+
ConsistencyOp();
67+
static std::unique_ptr<ConsistencyOp> generate();
68+
std::string to_string(uint64_t block_size) const override;
69+
};
70+
6471
template <OpType opType, int numIOs>
6572
class ReadWriteOp : public TestOp<opType> {
6673
public:

0 commit comments

Comments
 (0)