Add TTL eviction to local data cache (#16510)

We keep different versions of our cache to avoid race conditions but we
never evict stale data. This PR should fix that
This commit is contained in:
Weiko
2025-12-12 10:14:46 +01:00
committed by GitHub
parent 4b2a604ef0
commit bd8ed03990
3 changed files with 39 additions and 11 deletions
@@ -11,7 +11,7 @@ import { WorkspaceCacheProvider } from 'src/engine/workspace-cache/interfaces/wo
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { EntitySchemaFactory } from 'src/engine/twenty-orm/factories/entity-schema.factory';
import { GlobalWorkspaceDataSourceService } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-datasource.service';
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
import { buildEntitySchemaMetadataMaps } from 'src/engine/twenty-orm/global-workspace-datasource/types/entity-schema-metadata.type';
import { WorkspaceCache } from 'src/engine/workspace-cache/decorators/workspace-cache.decorator';
@@ -26,7 +26,7 @@ export class WorkspaceORMEntityMetadatasCacheService extends WorkspaceCacheProvi
@InjectRepository(FieldMetadataEntity)
private readonly fieldMetadataRepository: Repository<FieldMetadataEntity>,
private readonly entitySchemaFactory: EntitySchemaFactory,
private readonly globalWorkspaceDataSourceService: GlobalWorkspaceDataSourceService,
private readonly globalWorkspaceOrmManager: GlobalWorkspaceOrmManager,
) {
super();
}
@@ -57,17 +57,21 @@ export class WorkspaceORMEntityMetadatasCacheService extends WorkspaceCacheProvi
),
);
return this.buildEntityMetadatas(entitySchemas);
const entityMetadatas = await this.buildEntityMetadatas(entitySchemas);
return entityMetadatas;
}
private buildEntityMetadatas(
private async buildEntityMetadatas(
entitySchemas: EntitySchema[],
): EntityMetadata[] {
): Promise<EntityMetadata[]> {
const transformer = new EntitySchemaTransformer();
const metadataArgsStorage = transformer.transform(entitySchemas);
const dataSource =
await this.globalWorkspaceOrmManager.getGlobalWorkspaceDataSource();
const entityMetadataBuilder = new EntityMetadataBuilder(
this.globalWorkspaceDataSourceService.getGlobalWorkspaceDataSource(),
dataSource,
metadataArgsStorage,
);