Skip to content

Commit f3ee875

Browse files
bill-scalesaainscow
authored andcommitted
test: ceph_test_rados_io_sequence append sequences
Sequence 11 - sequential appends of fixed size Sequence 12 - sequentiial overwrite+append of fixed size and different offsets Signed-off-by: Bill Scales <[email protected]>
1 parent 03316ff commit f3ee875

File tree

3 files changed

+117
-3
lines changed

3 files changed

+117
-3
lines changed

src/common/io_exerciser/EcIoSequence.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ std::unique_ptr<IoSequence> EcIoSequence::generate_sequence(
3333
case Sequence::SEQUENCE_SEQ8:
3434
[[fallthrough]];
3535
case Sequence::SEQUENCE_SEQ9:
36+
[[fallthrough]];
37+
case Sequence::SEQUENCE_SEQ11:
38+
[[fallthrough]];
39+
case Sequence::SEQUENCE_SEQ12:
3640
return std::make_unique<ReadInjectSequence>(obj_size_range, seed,
3741
sequence, k, m);
3842
case Sequence::SEQUENCE_SEQ10:
@@ -264,4 +268,4 @@ std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::Seq10::_next() {
264268
ceph_abort_msg("Sequence in undefined state. Aborting");
265269
return DoneOp::generate();
266270
}
267-
}
271+
}

src/common/io_exerciser/IoSequence.cc

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ std::ostream& ceph::io_exerciser::operator<<(std::ostream& os,
4040
case Sequence::SEQUENCE_SEQ10:
4141
os << "SEQUENCE_SEQ10";
4242
break;
43+
case Sequence::SEQUENCE_SEQ11:
44+
os << "SEQUENCE_SEQ11";
45+
break;
46+
case Sequence::SEQUENCE_SEQ12:
47+
os << "SEQUENCE_SEQ12";
48+
break;
4349
case Sequence::SEQUENCE_END:
4450
os << "SEQUENCE_END";
4551
break;
@@ -79,6 +85,10 @@ std::unique_ptr<IoSequence> IoSequence::generate_sequence(
7985
"Sequence 10 only supported for erasure coded pools "
8086
"through the EcIoSequence interface");
8187
return nullptr;
88+
case Sequence::SEQUENCE_SEQ11:
89+
return std::make_unique<Seq11>(obj_size_range, seed);
90+
case Sequence::SEQUENCE_SEQ12:
91+
return std::make_unique<Seq12>(obj_size_range, seed);
8292
default:
8393
break;
8494
}
@@ -514,4 +524,73 @@ std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::Seq9::_next() {
514524
doneread = false;
515525
donebarrier = false;
516526
return SingleWriteOp::generate(offset, length);
517-
}
527+
}
528+
529+
ceph::io_exerciser::Seq11::Seq11(std::pair<int, int> obj_size_range, int seed)
530+
: IoSequence(obj_size_range, seed),
531+
count(0),
532+
doneread(false),
533+
donebarrier(false) {}
534+
535+
Sequence ceph::io_exerciser::Seq11::get_id() const {
536+
return Sequence::SEQUENCE_SEQ11;
537+
}
538+
539+
std::string ceph::io_exerciser::Seq11::get_name() const {
540+
return "Permutations of length sequential append I/O";
541+
}
542+
543+
std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::Seq11::_next() {
544+
if (count >= 16) {
545+
if (!doneread) {
546+
if (!donebarrier) {
547+
donebarrier = true;
548+
return BarrierOp::generate();
549+
}
550+
doneread = true;
551+
return SingleReadOp::generate(0, obj_size * (count + 1));
552+
}
553+
doneread = false;
554+
donebarrier = false;
555+
count = 0;
556+
return increment_object_size();
557+
}
558+
count++;
559+
return SingleAppendOp::generate(obj_size);
560+
}
561+
562+
ceph::io_exerciser::Seq12::Seq12(std::pair<int, int> obj_size_range, int seed)
563+
: IoSequence(obj_size_range, seed), count(0), overlap(1), doneread(false) {}
564+
565+
Sequence ceph::io_exerciser::Seq12::get_id() const {
566+
return Sequence::SEQUENCE_SEQ12;
567+
}
568+
569+
std::string ceph::io_exerciser::Seq12::get_name() const {
570+
return "Permutations of length sequential overwrite+append I/O";
571+
}
572+
573+
std::unique_ptr<ceph::io_exerciser::IoOp> ceph::io_exerciser::Seq12::_next() {
574+
if (count >= 16) {
575+
if (!doneread) {
576+
doneread = true;
577+
return SingleReadOp::generate(0, obj_size * (count + 1));
578+
}
579+
doneread = false;
580+
count = 0;
581+
overlap++;
582+
if (overlap > obj_size) {
583+
overlap = 1;
584+
return increment_object_size();
585+
} else {
586+
create = true;
587+
barrier = true;
588+
remove = true;
589+
return BarrierOp::generate();
590+
}
591+
}
592+
count++;
593+
barrier = true;
594+
return SingleWriteOp::generate((count * obj_size) - overlap,
595+
obj_size + overlap);
596+
}

src/common/io_exerciser/IoSequence.h

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ enum class Sequence {
4242
SEQUENCE_SEQ8,
4343
SEQUENCE_SEQ9,
4444
SEQUENCE_SEQ10,
45+
SEQUENCE_SEQ11,
46+
SEQUENCE_SEQ12,
4547

4648
SEQUENCE_END,
4749
SEQUENCE_BEGIN = SEQUENCE_SEQ0
@@ -228,9 +230,38 @@ class Seq9 : public IoSequence {
228230
public:
229231
Seq9(std::pair<int, int> obj_size_range, int seed);
230232

233+
Sequence get_id() const override;
234+
std::string get_name() const override;
235+
std::unique_ptr<IoOp> _next() override;
236+
};
237+
238+
class Seq11 : public IoSequence {
239+
private:
240+
uint64_t count;
241+
bool doneread = true;
242+
bool donebarrier = false;
243+
244+
public:
245+
Seq11(std::pair<int, int> obj_size_range, int seed);
246+
247+
Sequence get_id() const override;
248+
std::string get_name() const override;
249+
std::unique_ptr<IoOp> _next() override;
250+
};
251+
252+
class Seq12 : public IoSequence {
253+
private:
254+
uint64_t count;
255+
uint64_t overlap;
256+
bool doneread = true;
257+
bool donebarrier = false;
258+
259+
public:
260+
Seq12(std::pair<int, int> obj_size_range, int seed);
261+
231262
Sequence get_id() const override;
232263
std::string get_name() const override;
233264
std::unique_ptr<IoOp> _next() override;
234265
};
235266
} // namespace io_exerciser
236-
} // namespace ceph
267+
} // namespace ceph

0 commit comments

Comments
 (0)