Don't scan+apply every setOldestVersion call

This commit is contained in:
2024-05-23 14:54:07 -07:00
parent e08ec7c54d
commit 5b4c7ddf7d
2 changed files with 21 additions and 17 deletions

View File

@@ -12,7 +12,8 @@ using String = std::basic_string<uint8_t>;
struct Facade {
explicit Facade(int64_t version)
: unversionedVersion(version), versioned{version} {}
: oldestVersion(version), nextPurgeVersion(version),
unversionedVersion(version), versioned(version) {}
struct View {
@@ -131,6 +132,15 @@ struct Facade {
}
void setOldestVersion(int64_t version) {
// Don't scan and apply mutations every time setOldestVersion is called.
oldestVersion = version;
if (version >= nextPurgeVersion) {
nextPurgeVersion = versioned.getVersion();
} else {
return;
}
for (auto iter = versioned.begin(version), end = versioned.end(version);
iter != end; ++iter) {
auto m = *iter;
@@ -162,10 +172,14 @@ struct Facade {
versioned.setOldestVersion(version);
}
View viewAt(int64_t version) const { return View{this, version}; }
View viewAt(int64_t version) const {
assert(version >= oldestVersion);
assert(version <= versioned.getVersion());
return View{this, version};
}
int64_t getVersion() const { return versioned.getVersion(); }
int64_t getOldestVersion() const { return versioned.getOldestVersion(); }
int64_t getOldestVersion() const { return oldestVersion; }
void unversionedRead(const String &begin, const String &end, int &limit,
bool reverse,
@@ -197,6 +211,8 @@ struct Facade {
}
}
int64_t oldestVersion;
int64_t nextPurgeVersion;
int64_t unversionedVersion;
std::map<String, String> unversioned;
weaselab::VersionedMap versioned;