Optimize migrate-email-fields-command (#7035)

Quick follow up to prepare for 0.30 release
This commit is contained in:
Charles Bochet
2024-09-15 13:13:35 +02:00
committed by GitHub
parent f54eea0227
commit 872f52990a
4 changed files with 77 additions and 24 deletions

View File

@ -30,28 +30,11 @@ export class WorkspaceDatasourceFactory {
workspaceId: string,
workspaceMetadataVersion: number | null,
): Promise<WorkspaceDataSource> {
const latestWorkspaceMetadataVersion =
await this.workspaceCacheStorageService.getMetadataVersion(workspaceId);
if (latestWorkspaceMetadataVersion === undefined) {
await this.workspaceMetadataCacheService.recomputeMetadataCache(
workspaceId,
);
throw new TwentyORMException(
`Metadata version not found for workspace ${workspaceId}`,
TwentyORMExceptionCode.METADATA_VERSION_NOT_FOUND,
);
}
const desiredWorkspaceMetadataVersion =
workspaceMetadataVersion ?? latestWorkspaceMetadataVersion;
if (latestWorkspaceMetadataVersion !== desiredWorkspaceMetadataVersion) {
throw new TwentyORMException(
`Workspace metadata version mismatch detected for workspace ${workspaceId}. Current version: ${latestWorkspaceMetadataVersion}. Desired version: ${desiredWorkspaceMetadataVersion}`,
TwentyORMExceptionCode.METADATA_VERSION_MISMATCH,
await this.computeDesiredWorkspaceMetadataVersion(
workspaceId,
workspaceMetadataVersion,
);
}
const workspaceDataSource = await this.cacheManager.execute(
`${workspaceId}-${desiredWorkspaceMetadataVersion}`,
@ -166,4 +149,46 @@ export class WorkspaceDatasourceFactory {
return workspaceDataSource;
}
private async computeDesiredWorkspaceMetadataVersion(
workspaceId: string,
workspaceMetadataVersion: number | null,
): Promise<number> {
const latestWorkspaceMetadataVersion =
await this.workspaceCacheStorageService.getMetadataVersion(workspaceId);
if (latestWorkspaceMetadataVersion === undefined) {
await this.workspaceMetadataCacheService.recomputeMetadataCache(
workspaceId,
);
throw new TwentyORMException(
`Metadata version not found for workspace ${workspaceId}`,
TwentyORMExceptionCode.METADATA_VERSION_NOT_FOUND,
);
}
const desiredWorkspaceMetadataVersion =
workspaceMetadataVersion ?? latestWorkspaceMetadataVersion;
if (latestWorkspaceMetadataVersion !== desiredWorkspaceMetadataVersion) {
throw new TwentyORMException(
`Workspace metadata version mismatch detected for workspace ${workspaceId}. Current version: ${latestWorkspaceMetadataVersion}. Desired version: ${desiredWorkspaceMetadataVersion}`,
TwentyORMExceptionCode.METADATA_VERSION_MISMATCH,
);
}
return desiredWorkspaceMetadataVersion;
}
public async destroy(
workspaceId: string,
metadataVersion: number | null,
): Promise<void> {
const desiredWorkspaceMetadataVersion =
this.computeDesiredWorkspaceMetadataVersion(workspaceId, metadataVersion);
await this.cacheManager.clearKey(
`${workspaceId}-${desiredWorkspaceMetadataVersion}`,
);
}
}