@@ -56,28 +56,32 @@ bool DataGenerator::validate(bufferlist& bufferlist, uint64_t offset,
5656ceph::bufferptr SeededRandomGenerator::generate_block (uint64_t block_offset) {
5757 uint64_t block_size = m_model.get_block_size ();
5858 char buffer[block_size];
59+ SeedBytes seed = m_model.get_seed (block_offset);
60+ if (seed != 0 ) {
61+ std::mt19937_64 random_generator (seed);
62+ uint64_t rand1 = random_generator ();
63+ uint64_t rand2 = random_generator ();
5964
60- std::mt19937_64 random_generator (m_model.get_seed (block_offset));
61- uint64_t rand1 = random_generator ();
62- uint64_t rand2 = random_generator ();
63-
64- constexpr size_t generation_length = sizeof (uint64_t );
65+ constexpr size_t generation_length = sizeof (uint64_t );
6566
66- for (uint64_t i = 0 ; i < block_size;
67- i += (2 * generation_length), rand1++, rand2--) {
68- std::memcpy (buffer + i, &rand1, generation_length);
69- std::memcpy (buffer + i + generation_length, &rand2, generation_length);
70- }
67+ for (uint64_t i = 0 ; i < block_size;
68+ i += (2 * generation_length), rand1++, rand2--) {
69+ std::memcpy (buffer + i, &rand1, generation_length);
70+ std::memcpy (buffer + i + generation_length, &rand2, generation_length);
71+ }
7172
72- size_t remainingBytes = block_size % (generation_length * 2 );
73- if (remainingBytes > generation_length) {
74- size_t remainingBytes2 = remainingBytes - generation_length;
75- std::memcpy (buffer + block_size - remainingBytes, &rand1, remainingBytes);
76- std::memcpy (buffer + block_size - remainingBytes2, &rand2, remainingBytes2);
77- } else if (remainingBytes > 0 ) {
78- std::memcpy (buffer + block_size - remainingBytes, &rand1, remainingBytes);
73+ size_t remainingBytes = block_size % (generation_length * 2 );
74+ if (remainingBytes > generation_length) {
75+ size_t remainingBytes2 = remainingBytes - generation_length;
76+ std::memcpy (buffer + block_size - remainingBytes, &rand1, remainingBytes);
77+ std::memcpy (buffer + block_size - remainingBytes2, &rand2,
78+ remainingBytes2);
79+ } else if (remainingBytes > 0 ) {
80+ std::memcpy (buffer + block_size - remainingBytes, &rand1, remainingBytes);
81+ }
82+ } else {
83+ std::memset (buffer, 0 , block_size);
7984 }
80-
8185 return ceph::bufferptr (buffer, block_size);
8286}
8387
@@ -159,10 +163,12 @@ ceph::bufferptr HeaderedSeededRandomGenerator::generate_block(
159163 ceph::bufferptr bufferptr =
160164 SeededRandomGenerator::generate_block (block_offset);
161165
162- std::memcpy (bufferptr.c_str () + uniqueIdStart (), &unique_run_id,
163- uniqueIdLength ());
164- std::memcpy (bufferptr.c_str () + seedStart (), &seed, seedLength ());
165- std::memcpy (bufferptr.c_str () + timeStart (), ¤t_time, timeLength ());
166+ if (seed != 0 ) {
167+ std::memcpy (bufferptr.c_str () + uniqueIdStart (), &unique_run_id,
168+ uniqueIdLength ());
169+ std::memcpy (bufferptr.c_str () + seedStart (), &seed, seedLength ());
170+ std::memcpy (bufferptr.c_str () + timeStart (), ¤t_time, timeLength ());
171+ }
166172
167173 return bufferptr;
168174}
@@ -650,4 +656,4 @@ void HeaderedSeededRandomGenerator ::printDebugInformationForOffsets(
650656 printDebugInformationForRange (read_offset, range_start, range_length,
651657 rangeError, bufferlist);
652658 }
653- }
659+ }
0 commit comments