diff --git a/ServerBench.cpp b/ServerBench.cpp index b081b82..37bbf3c 100644 --- a/ServerBench.cpp +++ b/ServerBench.cpp @@ -66,13 +66,14 @@ template std::string tupleKey(const Ts &...ts) { constexpr int kTotalKeyRange = 1'000'000'000; constexpr int kWindowSize = 1'000'000; -constexpr int kNumKeys = 10; +constexpr int kNumReadKeysPerTx = 10; +constexpr int kNumWriteKeysPerTx = 5; void workload(weaselab::ConflictSet *cs) { int64_t version = kWindowSize; for (;; transactions.fetch_add(1, std::memory_order_relaxed)) { std::vector keyIndices; - for (int i = 0; i < kNumKeys; ++i) { + for (int i = 0; i < std::max(kNumReadKeysPerTx, kNumWriteKeysPerTx); ++i) { keyIndices.push_back(rand() % kTotalKeyRange); } std::sort(keyIndices.begin(), keyIndices.end()); @@ -80,7 +81,7 @@ void workload(weaselab::ConflictSet *cs) { constexpr std::string_view fullString = "this is a string, where a prefix of it is used as an element of the " "tuple forming the key"; - for (int i = 0; i < kNumKeys; ++i) { + for (int i = 0; i < int(keyIndices.size()); ++i) { keys.push_back( tupleKey(0x100, keyIndices[i] / fullString.size(), fullString.substr(0, keyIndices[i] % fullString.size()))); @@ -90,21 +91,22 @@ void workload(weaselab::ConflictSet *cs) { std::vector reads; std::vector writes; std::vector results; - for (int i = 0; i < kNumKeys; ++i) { + for (int i = 0; i < kNumWriteKeysPerTx; ++i) { writes.push_back({{(const uint8_t *)keys[i].data(), int(keys[i].size())}, {nullptr, 0}}); + } + reads.push_back({{(const uint8_t *)keys[0].data(), int(keys[0].size())}, + {(const uint8_t *)keys[1].data(), int(keys[1].size())}, + version - kWindowSize}); + static_assert(kNumReadKeysPerTx >= 3); + for (int i = 2; i < kNumReadKeysPerTx; ++i) { reads.push_back({{(const uint8_t *)keys[i].data(), int(keys[i].size())}, {nullptr, 0}, version - kWindowSize}); } results.resize(reads.size()); - cs->check(reads.data(), results.data(), reads.size()); - bool ok = true; - for (auto result : results) { - ok &= result == weaselab::ConflictSet::Commit; - } - cs->addWrites(writes.data(), ok ? writes.size() : 0, version); + cs->addWrites(writes.data(), writes.size(), version); cs->setOldestVersion(version - kWindowSize); ++version; }