#include <random>
#include <vector>
+#include <unordered_map>
#include <experimental/random>
#include <boost/program_options/parsers.hpp>
uint64_t get_obj_per_shard() const {
return size_per_shard / size_per_obj;
}
- uint64_t get_obj_per_coll() const {
- return get_obj_per_shard() / colls_per_shard;
- }
public:
po::options_description get_options() final {
po::options_description ret{"RandomWriteWorkload"};
ghobject_t::NO_GEN);
};
- std::vector<
+ std::unordered_map<
+ uint64_t,
std::pair<coll_t, crimson::os::CollectionRef>
> coll_refs;
for (uint64_t collidx = 0; collidx < colls_per_shard; ++collidx) {
);
auto ref = co_await local_store.create_new_collection(
cid);
- coll_refs.emplace_back(std::make_pair(cid, std::move(ref)));
+ coll_refs.emplace(collidx, std::make_pair(cid, std::move(ref)));
}
auto get_coll_id = [&](uint64_t obj_id) {
- return coll_refs[obj_id % get_obj_per_coll()].first;
+ assert(coll_refs.contains(obj_id % colls_per_shard));
+ return coll_refs.at(obj_id % colls_per_shard).first;
};
auto get_coll_ref = [&](uint64_t obj_id) {
- return coll_refs[obj_id % get_obj_per_coll()].second;
+ assert(coll_refs.contains(obj_id % colls_per_shard));
+ return coll_refs.at(obj_id % colls_per_shard).second;
};
unsigned running = 0;
}
INFO("writes_started {}", writes_started);
- for (auto &[id, ref]: coll_refs) {
+ for (auto &[_, entry]: coll_refs) {
+ auto &[id, ref] = entry;
INFO("flushing {}", id);
co_await local_store.flush(ref);
}
"enable debugging")
("work-load-type",
po::value<std::string>(&work_load_type)->required(),
- "work load type: pg_log or rgw_index")
+ "work load type: pg_log, rgw_index or random_write")
("smp", po::value<unsigned>(&smp),
"number of reactors");