mirror of
https://github.com/apple/foundationdb.git
synced 2025-05-31 01:37:54 +08:00
Fix a couple bugs. Don't store old versions in tenant map indefinitely.
This commit is contained in:
parent
c630cb45cd
commit
b4feddea8d
@ -81,6 +81,6 @@ public:
|
||||
};
|
||||
|
||||
typedef VersionedMap<TenantName, TenantMapEntry> TenantMap;
|
||||
typedef VersionedMap<KeyRef, TenantNameRef> TenantPrefixIndex;
|
||||
typedef VersionedMap<Key, TenantName> TenantPrefixIndex;
|
||||
|
||||
#endif
|
@ -2964,7 +2964,7 @@ TEST_CASE("/fdbserver/storageserver/constructMappedKey") {
|
||||
.append("{...}"_sr);
|
||||
|
||||
bool isRangeQuery = false;
|
||||
Key mappedKey = constructMappedKey(&kvr, mapperTuple, isRangeQuery, "foo"_sr);
|
||||
Key mappedKey = constructMappedKey(&kvr, mapperTuple, isRangeQuery, TenantMapEntry(1, "foo"_sr).prefix);
|
||||
|
||||
Key expectedMappedKey = Tuple()
|
||||
.append("normal"_sr)
|
||||
@ -5831,11 +5831,17 @@ ACTOR Future<Void> updateStorage(StorageServer* data) {
|
||||
state double beforeStorageUpdates = now();
|
||||
loop {
|
||||
state bool done = data->storage.makeVersionMutationsDurable(newOldestVersion, desiredVersion, bytesLeft);
|
||||
if (data->tenantMap.getLatestVersion() < newOldestVersion) {
|
||||
data->tenantMap.createNewVersion(newOldestVersion);
|
||||
data->tenantPrefixIndex.createNewVersion(newOldestVersion);
|
||||
}
|
||||
// We want to forget things from these data structures atomically with changing oldestVersion (and "before",
|
||||
// since oldestVersion.set() may trigger waiting actors) forgetVersionsBeforeAsync visibly forgets
|
||||
// immediately (without waiting) but asynchronously frees memory.
|
||||
Future<Void> finishedForgetting =
|
||||
data->mutableData().forgetVersionsBeforeAsync(newOldestVersion, TaskPriority::UpdateStorage);
|
||||
data->mutableData().forgetVersionsBeforeAsync(newOldestVersion, TaskPriority::UpdateStorage) &&
|
||||
data->tenantMap.forgetVersionsBeforeAsync(newOldestVersion, TaskPriority::UpdateStorage) &&
|
||||
data->tenantPrefixIndex.forgetVersionsBeforeAsync(newOldestVersion, TaskPriority::UpdateStorage);
|
||||
data->oldestVersion.set(newOldestVersion);
|
||||
wait(finishedForgetting);
|
||||
wait(yield(TaskPriority::UpdateStorage));
|
||||
|
Loading…
x
Reference in New Issue
Block a user