#include <execution>
#include <iterator>
+#include "common/debug.h"
+#include "common/dout.h"
+
+#define dout_subsys ceph_subsys_rados
+#define dout_context g_ceph_context
+
using ObjectModel = ceph::io_exerciser::ObjectModel;
ObjectModel::ObjectModel(const std::string& primary_oid, const std::string& secondary_oid,
void ObjectModel::applyIoOp(IoOp& op) {
auto generate_random = [&rng = rng]() {
- std::uniform_int_distribution<long long> distMax(1, std::numeric_limits<int>::max());
- return distMax(rng);
+ constexpr int64_t min = 1;
+ constexpr int64_t max = static_cast<int64_t>(std::numeric_limits<int>::max());
+ constexpr uint64_t range = static_cast<uint64_t>(max - min + 1);
+ uint64_t rand_value = rng();
+ int64_t result = static_cast<int64_t>(rand_value % range + min);
+ dout(0) << "S1 rand_value: " << rand_value << " range: "
+ << range << " result: " << result << " addr: " << &rng << dendl;
+ return result;
};
auto verify_and_record_read_op =
#include <random>
#include <string>
+#include "common/debug.h"
+#include "common/dout.h"
#include "include/ceph_assert.h"
#include "include/random.h"
+#define dout_subsys ceph_subsys_rados
+#define dout_context g_ceph_context
+
/* Overview
*
* class ProgramOptionReader
} else if (first_value.has_value()) {
return *std::exchange(first_value, std::nullopt);
} else {
- std::uniform_int_distribution<long long> dist_selections(0, num_selections - 1);
- return selections_array[dist_selections(rng)];
+ uint64_t range = static_cast<uint64_t>(num_selections);
+ uint64_t rand_value = rng();
+ size_t index = static_cast<size_t>(rand_value % range);
+ dout(0) << "S4 rand_value: " << rand_value << " range: "
+ << range << " index: " << index << " addr: " << &rng << dendl;
+ return selections_array[index];
}
}
+
protected:
std::mt19937_64& rng;
num_selections>& selections_array,
int num_selections_stable,
const std::array< option_type,
- num_selections_stable>& elections_array_stable>
+ num_selections_stable>& selections_array_stable>
class StableOptionSelector : public ProgramOptionReader<option_type> {
public:
StableOptionSelector(std::mt19937_64& rng,
if (select_first) {
if (stable) {
ceph_assert(selections_array.size() > 0);
- first_value = elections_array_stable[0];
+ first_value = selections_array_stable[0];
} else {
ceph_assert(selections_array.size() > 0);
first_value = selections_array[0];
} else if (first_value.has_value()) {
return *std::exchange(first_value, std::nullopt);
} else if (stable) {
- std::uniform_int_distribution<long long> dist_selections_stable(0, num_selections_stable - 1);
- return elections_array_stable[dist_selections_stable(rng)];
+ uint64_t range = static_cast<uint64_t>(num_selections_stable);
+ uint64_t rand_value = rng();
+ size_t index = static_cast<size_t>(rand_value % range);
+ dout(0) << "S2 rand_value: " << rand_value << " range: "
+ << range << " index: " << index << " addr: " << &rng << dendl;
+ return selections_array_stable[index];
} else {
- std::uniform_int_distribution<long long> dist_selections(0, num_selections - 1);
- return selections_array[dist_selections(rng)];
+ uint64_t range = static_cast<uint64_t>(num_selections);
+ uint64_t rand_value = rng();
+ size_t index = static_cast<size_t>(rand_value % range);
+ dout(0) << "S6 rand_value: " << rand_value << " range: "
+ << range << " index: " << index << " addr: " << &rng << dendl;
+ return selections_array[index];
}
}
virtual const std::optional<option_type> selectRandom() {
std::vector<option_type> selection = generate_selections();
- if (selection.size() > 0) {
- std::uniform_int_distribution<long long> dist_selection(0, selection.size() - 1);
- return selection[dist_selection(rng)];
+
+ if (!selection.empty()) {
+ uint64_t range = static_cast<uint64_t>(selection.size());
+ uint64_t rand_value = rng();
+ size_t index = static_cast<size_t>(rand_value % range);
+ dout(0) << "S3 rand_value: " << rand_value << " range: "
+ << range << " index: " << index << " addr: " << &rng << dendl;
+ return selection[index];
} else {
return std::nullopt;
}
std::vector<uint64_t> choices = {};
+ auto generate_random_int = [this](uint64_t range) -> uint64_t {
+ uint64_t rand_value = rng();
+ uint64_t index = rand_value % range;
+ dout(0) << "S5 rand_value: " << rand_value << " range: "
+ << range << " index: " << index << " addr: " << &rng << dendl;
+ return index;
+ };
+
if (4096 % minimum_chunksize == 0) {
choices.push_back(4096);
} else {
- std::uniform_int_distribution<long long> dist4(0, 3);
- choices.push_back(minimum_chunksize * (dist4(rng) + 1));
+ uint64_t r = generate_random_int(4); // 0–3
+ choices.push_back(minimum_chunksize * (r + 1));
}
if ((64 * 1024) % minimum_chunksize == 0) {
choices.push_back(64 * 1024);
} else {
- std::uniform_int_distribution<long long> dist64(0, 63);
- choices.push_back(minimum_chunksize * (dist64(rng) + 1));
+ uint64_t r = generate_random_int(64); // 0–63
+ choices.push_back(minimum_chunksize * (r + 1));
}
if ((256 * 1024) % minimum_chunksize == 0) {
choices.push_back(256 * 1024);
} else {
- std::uniform_int_distribution<long long> dist256(0, 255);
- choices.push_back(minimum_chunksize * (dist256(rng) + 1));
+ uint64_t r = generate_random_int(256); // 0–255
+ choices.push_back(minimum_chunksize * (r + 1));
}
return choices;