Drain all pending work in hashtable's setOldestVersion

This commit is contained in:
2024-03-05 17:18:58 -08:00
parent d81d02f11d
commit c8495b1695
2 changed files with 12 additions and 9 deletions

View File

@@ -60,7 +60,6 @@ void benchConflictSet() {
ConflictSet cs{0}; ConflictSet cs{0};
bench.batch(kOpsPerTx); bench.batch(kOpsPerTx);
bench.minEpochIterations(10000);
int64_t version = 0; int64_t version = 0;
@@ -239,6 +238,8 @@ void benchConflictSet() {
cs.setOldestVersion(version - kMvccWindow); cs.setOldestVersion(version - kMvccWindow);
bench.minEpochIterations(1000000);
{ {
bench.run("monotonic increasing point writes", [&]() { bench.run("monotonic increasing point writes", [&]() {
auto v = ++version; auto v = ++version;

View File

@@ -56,14 +56,16 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
return; return;
} }
auto iter = map.find(removalKey); auto iter = map.find(removalKey);
if (iter == map.end()) { while (keyUpdates > 0) {
iter = map.begin(); if (iter == map.end()) {
} iter = map.begin();
for (; keyUpdates > 0 && iter != map.end(); --keyUpdates) { }
if (iter->second <= oldestVersion) { for (; iter != map.end(); --keyUpdates) {
iter = map.erase(iter); if (iter->second <= oldestVersion) {
} else { iter = map.erase(iter);
++iter; } else {
++iter;
}
} }
} }
if (iter == map.end()) { if (iter == map.end()) {