diff --git a/ServerBench.cpp b/ServerBench.cpp index a845280..39bee2c 100644 --- a/ServerBench.cpp +++ b/ServerBench.cpp @@ -31,23 +31,38 @@ std::basic_string numToKey(int64_t num) { void workload(weaselab::ConflictSet *cs) { int64_t version = kWindowSize; + cs->addWrites(nullptr, 0, version); for (;; transactions.fetch_add(1, std::memory_order_relaxed)) { - // Read + // Reads { - auto rv = version - kWindowSize + rand() % kWindowSize; - auto k = numToKey(rv); - weaselab::ConflictSet::ReadRange r; - r.begin.p = k.data(); - r.begin.len = k.size(); - r.end.len = 0; - r.readVersion = rv; - weaselab::ConflictSet::Result result; - cs->check(&r, &result, 1); - if (result != weaselab::ConflictSet::Commit) { - abort(); - } + auto beginK = numToKey(version - kWindowSize); + auto endK = numToKey(version - 1); + auto pointRv = version - kWindowSize + rand() % kWindowSize + 1; + auto pointK = numToKey(pointRv); + weaselab::ConflictSet::ReadRange reads[] = { + { + {pointK.data(), int(pointK.size())}, + {nullptr, 0}, + pointRv, + }, + { + {beginK.data(), int(beginK.size())}, + {endK.data(), int(endK.size())}, + version - 2, + }, + }; + weaselab::ConflictSet::Result result[sizeof(reads) / sizeof(reads[0])]; + cs->check(reads, result, sizeof(reads) / sizeof(reads[0])); + // for (int i = 0; i < sizeof(reads) / sizeof(reads[0]); ++i) { + // if (result[i] != weaselab::ConflictSet::Commit) { + // fprintf(stderr, "Unexpected conflict: [%s, %s) @ %" PRId64 "\n", + // printable(reads[i].begin).c_str(), + // printable(reads[i].end).c_str(), reads[i].readVersion); + // abort(); + // } + // } } - // Write + // Writes { weaselab::ConflictSet::WriteRange w; auto k = numToKey(version);