From 523289efad708ac079a15d08fe3d6c8a1bba32cb Mon Sep 17 00:00:00 2001 From: Paul Rastoin <45004772+prastoin@users.noreply.github.com> Date: Wed, 25 Mar 2026 11:30:16 +0100 Subject: [PATCH] Do not rollback on cache invalidation failure in workspace migration runner (#18947) --- .../workspace-migration-runner.service.ts | 45 +++++++++++-------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts index 510d1079ce2..096700186bb 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts @@ -219,9 +219,9 @@ export class WorkspaceMigrationRunnerService { await queryRunner.connect(); await queryRunner.startTransaction(); - try { - const allMetadataEvents: MetadataEvent[] = []; + const allMetadataEvents: MetadataEvent[] = []; + try { for (const action of actions) { const { partialOptimisticCache, metadataEvents } = await this.workspaceMigrationRunnerActionHandlerRegistry.executeActionHandler( @@ -248,23 +248,6 @@ export class WorkspaceMigrationRunnerService { await queryRunner.commitTransaction(); this.logger.timeEnd('Runner', 'Transaction execution'); - - await this.invalidateCache({ - allFlatEntityMapsKeys, - workspaceId, - }); - - const hasSchemaMetadataChanged = - allFlatEntityMapsKeys.includes('flatObjectMetadataMaps') || - allFlatEntityMapsKeys.includes('flatFieldMetadataMaps'); - - this.logger.timeEnd('Runner', 'Total execution'); - - return { - allFlatEntityMaps, - metadataEvents: allMetadataEvents, - hasSchemaMetadataChanged, - }; } catch (error) { await queryRunner.rollbackTransaction().catch((rollbackError) => // oxlint-disable-next-line no-console @@ -300,5 +283,29 @@ export class WorkspaceMigrationRunnerService { } finally { await queryRunner.release(); } + + try { + await this.invalidateCache({ + allFlatEntityMapsKeys, + workspaceId, + }); + } catch (cacheError) { + this.logger.error( + `Cache invalidation failed after committed transaction: ${cacheError}`, + 'Runner', + ); + } + + const hasSchemaMetadataChanged = + allFlatEntityMapsKeys.includes('flatObjectMetadataMaps') || + allFlatEntityMapsKeys.includes('flatFieldMetadataMaps'); + + this.logger.timeEnd('Runner', 'Total execution'); + + return { + allFlatEntityMaps, + metadataEvents: allMetadataEvents, + hasSchemaMetadataChanged, + }; }; }