From c8495b1695831c9da5bfe69719796eb19c3059b5 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 5 Mar 2024 17:18:58 -0800 Subject: [PATCH] Drain all pending work in hashtable's setOldestVersion --- Bench.cpp | 3 ++- HashTable.cpp | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Bench.cpp b/Bench.cpp index 20b66a9..71d6b60 100644 --- a/Bench.cpp +++ b/Bench.cpp @@ -60,7 +60,6 @@ void benchConflictSet() { ConflictSet cs{0}; bench.batch(kOpsPerTx); - bench.minEpochIterations(10000); int64_t version = 0; @@ -239,6 +238,8 @@ void benchConflictSet() { cs.setOldestVersion(version - kMvccWindow); + bench.minEpochIterations(1000000); + { bench.run("monotonic increasing point writes", [&]() { auto v = ++version; diff --git a/HashTable.cpp b/HashTable.cpp index 20f326d..ed57b22 100644 --- a/HashTable.cpp +++ b/HashTable.cpp @@ -56,14 +56,16 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl { return; } auto iter = map.find(removalKey); - if (iter == map.end()) { - iter = map.begin(); - } - for (; keyUpdates > 0 && iter != map.end(); --keyUpdates) { - if (iter->second <= oldestVersion) { - iter = map.erase(iter); - } else { - ++iter; + while (keyUpdates > 0) { + if (iter == map.end()) { + iter = map.begin(); + } + for (; iter != map.end(); --keyUpdates) { + if (iter->second <= oldestVersion) { + iter = map.erase(iter); + } else { + ++iter; + } } } if (iter == map.end()) {