diff --git a/fdbclient/Tenant.h b/fdbclient/Tenant.h index 7c5750e0dd..221ae451bb 100644 --- a/fdbclient/Tenant.h +++ b/fdbclient/Tenant.h @@ -81,6 +81,6 @@ public: }; typedef VersionedMap TenantMap; -typedef VersionedMap TenantPrefixIndex; +typedef VersionedMap TenantPrefixIndex; #endif \ No newline at end of file diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 13f744ef18..0489e9fb47 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -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 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 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));