2626
2727#include < random>
2828#include < vector>
29+ #include < unordered_map>
2930#include < experimental/random>
3031
3132#include < boost/program_options/parsers.hpp>
@@ -589,9 +590,6 @@ class RandomWriteWorkload : public StoreBenchWorkload {
589590 uint64_t get_obj_per_shard () const {
590591 return size_per_shard / size_per_obj;
591592 }
592- uint64_t get_obj_per_coll () const {
593- return get_obj_per_shard () / colls_per_shard;
594- }
595593public:
596594 po::options_description get_options () final {
597595 po::options_description ret{" RandomWriteWorkload" };
@@ -664,7 +662,8 @@ seastar::future<results_t> RandomWriteWorkload::run(
664662 ghobject_t ::NO_GEN);
665663 };
666664
667- std::vector<
665+ std::unordered_map<
666+ uint64_t ,
668667 std::pair<coll_t , crimson::os::CollectionRef>
669668 > coll_refs;
670669 for (uint64_t collidx = 0 ; collidx < colls_per_shard; ++collidx) {
@@ -673,13 +672,15 @@ seastar::future<results_t> RandomWriteWorkload::run(
673672 );
674673 auto ref = co_await local_store.create_new_collection (
675674 cid);
676- coll_refs.emplace_back ( std::make_pair (cid, std::move (ref)));
675+ coll_refs.emplace (collidx, std::make_pair (cid, std::move (ref)));
677676 }
678677 auto get_coll_id = [&](uint64_t obj_id) {
679- return coll_refs[obj_id % get_obj_per_coll ()].first ;
678+ assert (coll_refs.contains (obj_id % colls_per_shard));
679+ return coll_refs.at (obj_id % colls_per_shard).first ;
680680 };
681681 auto get_coll_ref = [&](uint64_t obj_id) {
682- return coll_refs[obj_id % get_obj_per_coll ()].second ;
682+ assert (coll_refs.contains (obj_id % colls_per_shard));
683+ return coll_refs.at (obj_id % colls_per_shard).second ;
683684 };
684685
685686 unsigned running = 0 ;
@@ -751,7 +752,8 @@ seastar::future<results_t> RandomWriteWorkload::run(
751752 }
752753
753754 INFO (" writes_started {}" , writes_started);
754- for (auto &[id, ref]: coll_refs) {
755+ for (auto &[_, entry]: coll_refs) {
756+ auto &[id, ref] = entry;
755757 INFO (" flushing {}" , id);
756758 co_await local_store.flush (ref);
757759 }
@@ -790,7 +792,7 @@ int main(int argc, char **argv) {
790792 (" debug" , po::bool_switch (&debug), " enable debugging" )
791793 (" work-load-type" ,
792794 po::value<std::string>(&work_load_type)->required (),
793- " work load type: pg_log or rgw_index " )
795+ " work load type: pg_log, rgw_index or random_write " )
794796 (" smp" , po::value<unsigned >(&smp),
795797 " number of reactors" );
796798
0 commit comments