mirror of
https://github.com/apple/foundationdb.git
synced 2025-06-01 10:45:56 +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<TenantName, TenantMapEntry> TenantMap;
|
||||||
typedef VersionedMap<KeyRef, TenantNameRef> TenantPrefixIndex;
|
typedef VersionedMap<Key, TenantName> TenantPrefixIndex;
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -2964,7 +2964,7 @@ TEST_CASE("/fdbserver/storageserver/constructMappedKey") {
|
|||||||
.append("{...}"_sr);
|
.append("{...}"_sr);
|
||||||
|
|
||||||
bool isRangeQuery = false;
|
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()
|
Key expectedMappedKey = Tuple()
|
||||||
.append("normal"_sr)
|
.append("normal"_sr)
|
||||||
@ -5831,11 +5831,17 @@ ACTOR Future<Void> updateStorage(StorageServer* data) {
|
|||||||
state double beforeStorageUpdates = now();
|
state double beforeStorageUpdates = now();
|
||||||
loop {
|
loop {
|
||||||
state bool done = data->storage.makeVersionMutationsDurable(newOldestVersion, desiredVersion, bytesLeft);
|
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",
|
// 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
|
// since oldestVersion.set() may trigger waiting actors) forgetVersionsBeforeAsync visibly forgets
|
||||||
// immediately (without waiting) but asynchronously frees memory.
|
// immediately (without waiting) but asynchronously frees memory.
|
||||||
Future<Void> finishedForgetting =
|
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);
|
data->oldestVersion.set(newOldestVersion);
|
||||||
wait(finishedForgetting);
|
wait(finishedForgetting);
|
||||||
wait(yield(TaskPriority::UpdateStorage));
|
wait(yield(TaskPriority::UpdateStorage));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user