diff --git a/Bench.cpp b/Bench.cpp index 727494d..11d3b61 100644 --- a/Bench.cpp +++ b/Bench.cpp @@ -787,13 +787,21 @@ template void benchConflictSet(const std::string &name) { ++iter; } + while (version < kMvccWindow) { + auto v = ++version; + for (auto &w : writes) { + w.writeVersion = v; + } + cs.addWrites(writes.data(), writes.size()); + } + bench.run(name + " (point writes)", [&]() { auto v = ++version; for (auto &w : writes) { w.writeVersion = v; } cs.addWrites(writes.data(), writes.size()); - cs.setOldestVersion(std::max(version - kMvccWindow, 0)); + cs.setOldestVersion(version - kMvccWindow); }); } @@ -817,7 +825,7 @@ template void benchConflictSet(const std::string &name) { w.writeVersion = v; } cs.addWrites(writes.data(), writes.size()); - cs.setOldestVersion(std::max(version - kMvccWindow, 0)); + cs.setOldestVersion(version - kMvccWindow); }); } @@ -841,7 +849,7 @@ template void benchConflictSet(const std::string &name) { w.writeVersion = v; } cs.addWrites(writes.data(), writes.size()); - cs.setOldestVersion(std::max(version - kMvccWindow, 0)); + cs.setOldestVersion(version - kMvccWindow); }); } } diff --git a/ConflictSet.cpp b/ConflictSet.cpp index cca8b50..c4f0a98 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -1743,6 +1743,9 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl { } void setOldestVersion(int64_t oldestVersion) { + if (oldestVersion <= this->oldestVersion) { + return; + } this->oldestVersion = oldestVersion; Node *prev = firstGeq(root, removalKey).n; // There's no way to erase removalKey without introducing a key after it