@@ -19,6 +19,7 @@ using TripleWriteOp = ceph::io_exerciser::TripleWriteOp;
1919using SingleFailedWriteOp = ceph::io_exerciser::SingleFailedWriteOp;
2020using DoubleFailedWriteOp = ceph::io_exerciser::DoubleFailedWriteOp;
2121using TripleFailedWriteOp = ceph::io_exerciser::TripleFailedWriteOp;
22+ using SingleAppendOp = ceph::io_exerciser::SingleAppendOp;
2223
2324namespace {
2425std::string value_to_string (uint64_t v) {
@@ -100,16 +101,21 @@ template <OpType opType, int numIOs>
100101std::string ceph::io_exerciser::ReadWriteOp<opType, numIOs>::to_string(
101102 uint64_t block_size) const {
102103 std::string offset_length_desc;
104+ std::string length_desc;
103105 if (numIOs > 0 ) {
104106 offset_length_desc += fmt::format (
105107 " offset1={}" , value_to_string (this ->offset [0 ] * block_size));
106- offset_length_desc += fmt::format (
107- " ,length1={}" , value_to_string (this ->length [0 ] * block_size));
108+ length_desc += fmt::format (" length1={}" ,
109+ value_to_string (this ->length [0 ] * block_size));
110+ offset_length_desc += " ," + length_desc;
108111 for (int i = 1 ; i < numIOs; i++) {
112+ std::string length;
109113 offset_length_desc += fmt::format (
110114 " ,offset{}={}" , i + 1 , value_to_string (this ->offset [i] * block_size));
111- offset_length_desc += fmt::format (
112- " ,length{}={}" , i + 1 , value_to_string (this ->length [i] * block_size));
115+ length += fmt::format (" ,length{}={}" , i + 1 ,
116+ value_to_string (this ->length [i] * block_size));
117+ length_desc += length;
118+ offset_length_desc += length;
113119 }
114120 }
115121 switch (opType) {
@@ -125,6 +131,8 @@ std::string ceph::io_exerciser::ReadWriteOp<opType, numIOs>::to_string(
125131 [[fallthrough]];
126132 case OpType::Write3:
127133 return fmt::format (" Write{} ({})" , numIOs, offset_length_desc);
134+ case OpType::Append:
135+ return fmt::format (" Append{} ({})" , numIOs, length_desc);
128136 case OpType::FailedWrite:
129137 [[fallthrough]];
130138 case OpType::FailedWrite2:
@@ -200,6 +208,13 @@ std::unique_ptr<TripleWriteOp> TripleWriteOp::generate(
200208 offset3, length3);
201209}
202210
211+ SingleAppendOp::SingleAppendOp (uint64_t length)
212+ : ReadWriteOp<OpType::Append, 1>({0 }, {length}) {}
213+
214+ std::unique_ptr<SingleAppendOp> SingleAppendOp::generate (uint64_t length) {
215+ return std::make_unique<SingleAppendOp>(length);
216+ }
217+
203218SingleFailedWriteOp::SingleFailedWriteOp (uint64_t offset, uint64_t length)
204219 : ReadWriteOp<OpType::FailedWrite, 1>({offset}, {length}) {}
205220
@@ -313,4 +328,4 @@ std::unique_ptr<ceph::io_exerciser::ClearWriteErrorInjectOp>
313328ceph::io_exerciser ::ClearWriteErrorInjectOp::generate (
314329 int shard, const std::optional<uint64_t >& type) {
315330 return std::make_unique<ClearWriteErrorInjectOp>(shard, type);
316- }
331+ }
0 commit comments