From b30db10d898fa791d99d13192ef411cace4f7c05 Mon Sep 17 00:00:00 2001 From: Omar Ajoue Date: Fri, 24 Feb 2023 14:53:49 +0100 Subject: [PATCH 1/2] fix: Prevent executions from displaying as running forever (#5563) * fix: Prevent executions from displaying as running forever * fix: Correct migration query --- .../cli/src/WorkflowExecuteAdditionalData.ts | 9 +++++--- ...7236788851-UpdateRunningExecutionStatus.ts | 22 +++++++++++++++++++ .../src/databases/migrations/mysqldb/index.ts | 2 ++ ...7236854063-UpdateRunningExecutionStatus.ts | 22 +++++++++++++++++++ .../databases/migrations/postgresdb/index.ts | 2 ++ ...7237073720-UpdateRunningExecutionStatus.ts | 22 +++++++++++++++++++ .../src/databases/migrations/sqlite/index.ts | 2 ++ 7 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 packages/cli/src/databases/migrations/mysqldb/1677236788851-UpdateRunningExecutionStatus.ts create mode 100644 packages/cli/src/databases/migrations/postgresdb/1677236854063-UpdateRunningExecutionStatus.ts create mode 100644 packages/cli/src/databases/migrations/sqlite/1677237073720-UpdateRunningExecutionStatus.ts diff --git a/packages/cli/src/WorkflowExecuteAdditionalData.ts b/packages/cli/src/WorkflowExecuteAdditionalData.ts index f5291be49f..cf21a80ca4 100644 --- a/packages/cli/src/WorkflowExecuteAdditionalData.ts +++ b/packages/cli/src/WorkflowExecuteAdditionalData.ts @@ -472,7 +472,6 @@ export function hookFunctionsPreExecute(parentProcessMode?: string): IWorkflowEx fullExecutionData.status = 'running'; const flattenedExecutionData = ResponseHelper.flattenExecutionData(fullExecutionData); - await Db.collections.Execution.update( this.executionId, flattenedExecutionData as IExecutionFlattedDb, @@ -578,7 +577,11 @@ function hookFunctionsSave(parentProcessMode?: string): IWorkflowExecuteHooks { saveDataSuccessExecution; } - const workflowDidSucceed = !fullRunData.data.resultData.error; + const workflowHasCrashed = fullRunData.status === 'crashed'; + const workflowDidSucceed = !fullRunData.data.resultData.error && !workflowHasCrashed; + let workflowStatusFinal: ExecutionStatus = workflowDidSucceed ? 'success' : 'failed'; + if (workflowHasCrashed) workflowStatusFinal = 'crashed'; + if ( (workflowDidSucceed && saveDataSuccessExecution === 'none') || (!workflowDidSucceed && saveDataErrorExecution === 'none') @@ -626,7 +629,7 @@ function hookFunctionsSave(parentProcessMode?: string): IWorkflowExecuteHooks { stoppedAt: fullRunData.stoppedAt, workflowData: pristineWorkflowData, waitTill: fullRunData.waitTill, - status: fullRunData.status, + status: workflowStatusFinal, }; if (this.retryOf !== undefined) { diff --git a/packages/cli/src/databases/migrations/mysqldb/1677236788851-UpdateRunningExecutionStatus.ts b/packages/cli/src/databases/migrations/mysqldb/1677236788851-UpdateRunningExecutionStatus.ts new file mode 100644 index 0000000000..12225e7623 --- /dev/null +++ b/packages/cli/src/databases/migrations/mysqldb/1677236788851-UpdateRunningExecutionStatus.ts @@ -0,0 +1,22 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; +import { logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; +import config from '@/config'; + +export class UpdateRunningExecutionStatus1677236788851 implements MigrationInterface { + name = 'UpdateRunningExecutionStatus1677236788851'; + public async up(queryRunner: QueryRunner): Promise { + logMigrationStart(this.name); + const tablePrefix = config.getEnv('database.tablePrefix'); + + await queryRunner.query( + `UPDATE \`${tablePrefix}execution_entity\` SET status='failed' WHERE status = 'running' AND finished=0 AND \`stoppedAt\` IS NOT NULL;`, + ); + await queryRunner.query( + `UPDATE \`${tablePrefix}execution_entity\` SET status='success' WHERE status = 'running' AND finished=1 AND \`stoppedAt\` IS NOT NULL;`, + ); + + logMigrationEnd(this.name); + } + + public async down(queryRunner: QueryRunner): Promise {} +} diff --git a/packages/cli/src/databases/migrations/mysqldb/index.ts b/packages/cli/src/databases/migrations/mysqldb/index.ts index db7ab0ff41..b67441e08f 100644 --- a/packages/cli/src/databases/migrations/mysqldb/index.ts +++ b/packages/cli/src/databases/migrations/mysqldb/index.ts @@ -33,6 +33,7 @@ import { CreateLdapEntities1674509946020 } from './1674509946020-CreateLdapEntit import { PurgeInvalidWorkflowConnections1675940580449 } from './1675940580449-PurgeInvalidWorkflowConnections'; import { AddStatusToExecutions1674138566000 } from './1674138566000-AddStatusToExecutions'; import { MigrateExecutionStatus1676996103000 } from './1676996103000-MigrateExecutionStatus'; +import { UpdateRunningExecutionStatus1677236788851 } from './1677236788851-UpdateRunningExecutionStatus'; export const mysqlMigrations = [ InitialMigration1588157391238, @@ -70,4 +71,5 @@ export const mysqlMigrations = [ PurgeInvalidWorkflowConnections1675940580449, AddStatusToExecutions1674138566000, MigrateExecutionStatus1676996103000, + UpdateRunningExecutionStatus1677236788851, ]; diff --git a/packages/cli/src/databases/migrations/postgresdb/1677236854063-UpdateRunningExecutionStatus.ts b/packages/cli/src/databases/migrations/postgresdb/1677236854063-UpdateRunningExecutionStatus.ts new file mode 100644 index 0000000000..cc01754903 --- /dev/null +++ b/packages/cli/src/databases/migrations/postgresdb/1677236854063-UpdateRunningExecutionStatus.ts @@ -0,0 +1,22 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; +import { logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; +import config from '@/config'; + +export class UpdateRunningExecutionStatus1677236854063 implements MigrationInterface { + name = 'UpdateRunningExecutionStatus1677236854063'; + public async up(queryRunner: QueryRunner): Promise { + logMigrationStart(this.name); + const tablePrefix = config.getEnv('database.tablePrefix'); + + await queryRunner.query( + `UPDATE "${tablePrefix}execution_entity" SET "status" = 'failed' WHERE "status" = 'running' AND "finished"=false AND "stoppedAt" IS NOT NULL;`, + ); + await queryRunner.query( + `UPDATE "${tablePrefix}execution_entity" SET "status" = 'success' WHERE "status" = 'running' AND "finished"=true AND "stoppedAt" IS NOT NULL;`, + ); + + logMigrationEnd(this.name); + } + + public async down(queryRunner: QueryRunner): Promise {} +} diff --git a/packages/cli/src/databases/migrations/postgresdb/index.ts b/packages/cli/src/databases/migrations/postgresdb/index.ts index 32b48f626c..9aa75b16ed 100644 --- a/packages/cli/src/databases/migrations/postgresdb/index.ts +++ b/packages/cli/src/databases/migrations/postgresdb/index.ts @@ -31,6 +31,7 @@ import { CreateLdapEntities1674509946020 } from './1674509946020-CreateLdapEntit import { PurgeInvalidWorkflowConnections1675940580449 } from './1675940580449-PurgeInvalidWorkflowConnections'; import { AddStatusToExecutions1674138566000 } from './1674138566000-AddStatusToExecutions'; import { MigrateExecutionStatus1676996103000 } from './1676996103000-MigrateExecutionStatus'; +import { UpdateRunningExecutionStatus1677236854063 } from './1677236854063-UpdateRunningExecutionStatus'; export const postgresMigrations = [ InitialMigration1587669153312, @@ -66,4 +67,5 @@ export const postgresMigrations = [ PurgeInvalidWorkflowConnections1675940580449, AddStatusToExecutions1674138566000, MigrateExecutionStatus1676996103000, + UpdateRunningExecutionStatus1677236854063, ]; diff --git a/packages/cli/src/databases/migrations/sqlite/1677237073720-UpdateRunningExecutionStatus.ts b/packages/cli/src/databases/migrations/sqlite/1677237073720-UpdateRunningExecutionStatus.ts new file mode 100644 index 0000000000..335fd27c1f --- /dev/null +++ b/packages/cli/src/databases/migrations/sqlite/1677237073720-UpdateRunningExecutionStatus.ts @@ -0,0 +1,22 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; +import { logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; +import config from '@/config'; + +export class UpdateRunningExecutionStatus1677237073720 implements MigrationInterface { + name = 'UpdateRunningExecutionStatus1677237073720'; + public async up(queryRunner: QueryRunner): Promise { + logMigrationStart(this.name); + const tablePrefix = config.getEnv('database.tablePrefix'); + + await queryRunner.query( + `UPDATE "${tablePrefix}execution_entity" SET "status" = 'failed' WHERE "status" = 'running' AND "finished"=0 AND "stoppedAt" IS NOT NULL;`, + ); + await queryRunner.query( + `UPDATE "${tablePrefix}execution_entity" SET "status" = 'success' WHERE "status" = 'running' AND "finished"=1 AND "stoppedAt" IS NOT NULL;`, + ); + + logMigrationEnd(this.name); + } + + public async down(queryRunner: QueryRunner): Promise {} +} diff --git a/packages/cli/src/databases/migrations/sqlite/index.ts b/packages/cli/src/databases/migrations/sqlite/index.ts index eadb90effc..42782c2430 100644 --- a/packages/cli/src/databases/migrations/sqlite/index.ts +++ b/packages/cli/src/databases/migrations/sqlite/index.ts @@ -30,6 +30,7 @@ import { CreateLdapEntities1674509946020 } from './1674509946020-CreateLdapEntit import { PurgeInvalidWorkflowConnections1675940580449 } from './1675940580449-PurgeInvalidWorkflowConnections'; import { AddStatusToExecutions1674138566000 } from './1674138566000-AddStatusToExecutions'; import { MigrateExecutionStatus1676996103000 } from './1676996103000-MigrateExecutionStatus'; +import { UpdateRunningExecutionStatus1677237073720 } from './1677237073720-UpdateRunningExecutionStatus'; const sqliteMigrations = [ InitialMigration1588102412422, @@ -64,6 +65,7 @@ const sqliteMigrations = [ PurgeInvalidWorkflowConnections1675940580449, AddStatusToExecutions1674138566000, MigrateExecutionStatus1676996103000, + UpdateRunningExecutionStatus1677237073720, ]; export { sqliteMigrations }; From 973518819599e473a2ee885a5e10bafcbd2a7946 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 24 Feb 2023 16:21:55 +0100 Subject: [PATCH 2/2] :rocket: Release 0.217.1 (#5565) --- CHANGELOG.md | 9 +++++++++ package.json | 2 +- packages/cli/package.json | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6cc121e52..4b7bd29603 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## [0.217.1](https://github.com/n8n-io/n8n/compare/n8n@0.217.0...n8n@0.217.1) (2023-02-24) + + +### Bug Fixes + +* Prevent executions from displaying as running forever ([#5563](https://github.com/n8n-io/n8n/issues/5563)) ([b30db10](https://github.com/n8n-io/n8n/commit/b30db10d898fa791d99d13192ef411cace4f7c05)) + + + # [0.217.0](https://github.com/n8n-io/n8n/compare/n8n@0.216.1...n8n@0.217.0) (2023-02-23) diff --git a/package.json b/package.json index 25a33f4cc7..0b205e4a35 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "n8n", - "version": "0.217.0", + "version": "0.217.1", "private": true, "homepage": "https://n8n.io", "engines": { diff --git a/packages/cli/package.json b/packages/cli/package.json index ecc7163c58..2cad4b9737 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "n8n", - "version": "0.217.0", + "version": "0.217.1", "description": "n8n Workflow Automation Tool", "license": "SEE LICENSE IN LICENSE.md", "homepage": "https://n8n.io",