From 413e0bccb4d0144e5bdcf9221762e3f2b4428194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Mon, 4 Sep 2023 14:34:03 +0200 Subject: [PATCH] feat(core): Migration for soft deletions for executions (#7088) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Based on https://github.com/n8n-io/n8n/pull/7065 --------- Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ --- .../src/databases/entities/ExecutionEntity.ts | 3 +++ .../1693491613982-ExecutionSoftDelete.ts | 19 +++++++++++++++++++ .../src/databases/migrations/mysqldb/index.ts | 2 ++ .../databases/migrations/postgresdb/index.ts | 2 ++ .../1693491613982-ExecutionSoftDelete.ts | 5 +++++ .../src/databases/migrations/sqlite/index.ts | 2 ++ 6 files changed, 33 insertions(+) create mode 100644 packages/cli/src/databases/migrations/common/1693491613982-ExecutionSoftDelete.ts create mode 100644 packages/cli/src/databases/migrations/sqlite/1693491613982-ExecutionSoftDelete.ts diff --git a/packages/cli/src/databases/entities/ExecutionEntity.ts b/packages/cli/src/databases/entities/ExecutionEntity.ts index 8301346a7..f71bf0ba5 100644 --- a/packages/cli/src/databases/entities/ExecutionEntity.ts +++ b/packages/cli/src/databases/entities/ExecutionEntity.ts @@ -49,6 +49,9 @@ export class ExecutionEntity { @Column({ type: datetimeColumnType, nullable: true }) stoppedAt: Date; + @Column(datetimeColumnType) + deletedAt: Date; + @Column({ nullable: true }) workflowId: string; diff --git a/packages/cli/src/databases/migrations/common/1693491613982-ExecutionSoftDelete.ts b/packages/cli/src/databases/migrations/common/1693491613982-ExecutionSoftDelete.ts new file mode 100644 index 000000000..50e31e809 --- /dev/null +++ b/packages/cli/src/databases/migrations/common/1693491613982-ExecutionSoftDelete.ts @@ -0,0 +1,19 @@ +import type { MigrationContext, ReversibleMigration } from '@/databases/types'; + +/** + * Add an indexed column `deletedAt` to track soft-deleted executions. + * Add an index on `stoppedAt`, used by executions pruning. + */ +export class ExecutionSoftDelete1693491613982 implements ReversibleMigration { + async up({ schemaBuilder: { addColumns, column, createIndex } }: MigrationContext) { + await addColumns('execution_entity', [column('deletedAt').timestamp()]); + await createIndex('execution_entity', ['deletedAt']); + await createIndex('execution_entity', ['stoppedAt']); + } + + async down({ schemaBuilder: { dropColumns, dropIndex } }: MigrationContext) { + await dropIndex('execution_entity', ['stoppedAt']); + await dropIndex('execution_entity', ['deletedAt']); + await dropColumns('execution_entity', ['deletedAt']); + } +} diff --git a/packages/cli/src/databases/migrations/mysqldb/index.ts b/packages/cli/src/databases/migrations/mysqldb/index.ts index ce89cb312..b7aa3bd0e 100644 --- a/packages/cli/src/databases/migrations/mysqldb/index.ts +++ b/packages/cli/src/databases/migrations/mysqldb/index.ts @@ -46,6 +46,7 @@ import { RemoveResetPasswordColumns1690000000030 } from '../common/1690000000030 import { CreateWorkflowNameIndex1691088862123 } from '../common/1691088862123-CreateWorkflowNameIndex'; import { AddMfaColumns1690000000030 } from './../common/1690000000040-AddMfaColumns'; import { CreateWorkflowHistoryTable1692967111175 } from '../common/1692967111175-CreateWorkflowHistoryTable'; +import { ExecutionSoftDelete1693491613982 } from '../common/1693491613982-ExecutionSoftDelete'; export const mysqlMigrations: Migration[] = [ InitialMigration1588157391238, @@ -95,4 +96,5 @@ export const mysqlMigrations: Migration[] = [ CreateWorkflowNameIndex1691088862123, AddMfaColumns1690000000030, CreateWorkflowHistoryTable1692967111175, + ExecutionSoftDelete1693491613982, ]; diff --git a/packages/cli/src/databases/migrations/postgresdb/index.ts b/packages/cli/src/databases/migrations/postgresdb/index.ts index 89249058e..673cd03fe 100644 --- a/packages/cli/src/databases/migrations/postgresdb/index.ts +++ b/packages/cli/src/databases/migrations/postgresdb/index.ts @@ -44,6 +44,7 @@ import { AddMissingPrimaryKeyOnExecutionData1690787606731 } from './169078760673 import { CreateWorkflowNameIndex1691088862123 } from '../common/1691088862123-CreateWorkflowNameIndex'; import { AddMfaColumns1690000000030 } from './../common/1690000000040-AddMfaColumns'; import { CreateWorkflowHistoryTable1692967111175 } from '../common/1692967111175-CreateWorkflowHistoryTable'; +import { ExecutionSoftDelete1693491613982 } from '../common/1693491613982-ExecutionSoftDelete'; export const postgresMigrations: Migration[] = [ InitialMigration1587669153312, @@ -91,4 +92,5 @@ export const postgresMigrations: Migration[] = [ CreateWorkflowNameIndex1691088862123, AddMfaColumns1690000000030, CreateWorkflowHistoryTable1692967111175, + ExecutionSoftDelete1693491613982, ]; diff --git a/packages/cli/src/databases/migrations/sqlite/1693491613982-ExecutionSoftDelete.ts b/packages/cli/src/databases/migrations/sqlite/1693491613982-ExecutionSoftDelete.ts new file mode 100644 index 000000000..2a5dd30cf --- /dev/null +++ b/packages/cli/src/databases/migrations/sqlite/1693491613982-ExecutionSoftDelete.ts @@ -0,0 +1,5 @@ +import { ExecutionSoftDelete1693491613982 as BaseMigration } from '../common/1693491613982-ExecutionSoftDelete'; + +export class ExecutionSoftDelete1693491613982 extends BaseMigration { + transaction = false as const; +} diff --git a/packages/cli/src/databases/migrations/sqlite/index.ts b/packages/cli/src/databases/migrations/sqlite/index.ts index 9bac59767..325ffbe6b 100644 --- a/packages/cli/src/databases/migrations/sqlite/index.ts +++ b/packages/cli/src/databases/migrations/sqlite/index.ts @@ -43,6 +43,7 @@ import { RemoveResetPasswordColumns1690000000030 } from './1690000000030-RemoveR import { CreateWorkflowNameIndex1691088862123 } from '../common/1691088862123-CreateWorkflowNameIndex'; import { AddMfaColumns1690000000030 } from './1690000000040-AddMfaColumns'; import { CreateWorkflowHistoryTable1692967111175 } from '../common/1692967111175-CreateWorkflowHistoryTable'; +import { ExecutionSoftDelete1693491613982 } from './1693491613982-ExecutionSoftDelete'; const sqliteMigrations: Migration[] = [ InitialMigration1588102412422, @@ -89,6 +90,7 @@ const sqliteMigrations: Migration[] = [ CreateWorkflowNameIndex1691088862123, AddMfaColumns1690000000030, CreateWorkflowHistoryTable1692967111175, + ExecutionSoftDelete1693491613982, ]; export { sqliteMigrations };