]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/.../store-bench: fix coll_refs index error
authorChanyoung Park <chaney.p@kakaoenterprise.com>
Mon, 15 Sep 2025 13:08:20 +0000 (13:08 +0000)
committerChanyoung Park <chaney.p@kakaoenterprise.com>
Tue, 16 Sep 2025 10:42:40 +0000 (10:42 +0000)
Signed-off-by: Chanyoung Park <chaney.p@kakaoenterprise.com>
src/crimson/tools/store_bench/store-bench.cc

index 9e062d0bd0335872597f075fe6e02063f821ea8d..56d60bd31a263d25afbd37dd2a8b9d01e20e8446 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <random>
 #include <vector>
+#include <unordered_map>
 #include <experimental/random>
 
 #include <boost/program_options/parsers.hpp>
@@ -589,9 +590,6 @@ class RandomWriteWorkload : public StoreBenchWorkload {
   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"};
@@ -664,7 +662,8 @@ seastar::future<results_t> RandomWriteWorkload::run(
       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) {
@@ -673,13 +672,15 @@ seastar::future<results_t> RandomWriteWorkload::run(
    );
    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;
@@ -751,7 +752,8 @@ seastar::future<results_t> RandomWriteWorkload::run(
   }
 
   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);
   }
@@ -791,7 +793,7 @@ int main(int argc, char **argv) {
        "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");