From cae3b78187a14e1fc088fda39ae2debeb53269c1 Mon Sep 17 00:00:00 2001 From: Tomi Turtiainen <10324676+tomi@users.noreply.github.com> Date: Mon, 18 Dec 2023 10:57:59 +0200 Subject: [PATCH 1/2] feat(core): Add N8N_GRACEFUL_SHUTDOWN_TIMEOUT env var Add generic N8N_GRACEFUL_SHUTDOWN_TIMEOUT which controls how long n8n process will wait for graceful exit before exitting forcefully. This variables replaces the QUEUE_WORKER_TIMEOUT variable that was used for worker process. DEPRECATED: QUEUE_WORKER_TIMEOUT deprected QUEUE_WORKER_TIMEOUT environment variable has been replaced with N8N_GRACEFUL_SHUTDOWN_TIMEOUT. --- packages/cli/src/commands/BaseCommand.ts | 4 +++- packages/cli/src/commands/worker.ts | 8 +++++++- packages/cli/src/config/schema.ts | 9 ++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/commands/BaseCommand.ts b/packages/cli/src/commands/BaseCommand.ts index 6f2d03c482ff8..279ee42e091cb 100644 --- a/packages/cli/src/commands/BaseCommand.ts +++ b/packages/cli/src/commands/BaseCommand.ts @@ -44,7 +44,9 @@ export abstract class BaseCommand extends Command { * How long to wait for graceful shutdown before force killing the process. * Subclasses can override this value. */ - protected gracefulShutdownTimeoutInS: number = 30; + protected gracefulShutdownTimeoutInS: number = config.get( + 'generic.gracefulShutdownTimeoutInS', + ) as number; async init(): Promise { await initErrorHandling(); diff --git a/packages/cli/src/commands/worker.ts b/packages/cli/src/commands/worker.ts index d868e5c323003..31a862dfd80c6 100644 --- a/packages/cli/src/commands/worker.ts +++ b/packages/cli/src/commands/worker.ts @@ -264,7 +264,13 @@ export class Worker extends BaseCommand { } async init() { - this.gracefulShutdownTimeoutInS = config.getEnv('queue.bull.gracefulShutdownTimeout'); + const configuredShutdownTimeout = config.getEnv('queue.bull.gracefulShutdownTimeout'); + if (configuredShutdownTimeout) { + this.gracefulShutdownTimeoutInS = configuredShutdownTimeout; + this.logger.warn( + 'QUEUE_WORKER_TIMEOUT has been deprecated. Rename it to N8N_GRACEFUL_SHUTDOWN_TIMEOUT.', + ); + } await this.initCrashJournal(); this.logger.debug('Starting n8n worker...'); diff --git a/packages/cli/src/config/schema.ts b/packages/cli/src/config/schema.ts index af82b2484fbdf..7e99fb5fae5bf 100644 --- a/packages/cli/src/config/schema.ts +++ b/packages/cli/src/config/schema.ts @@ -439,7 +439,7 @@ export const schema = { env: 'QUEUE_RECOVERY_INTERVAL', }, gracefulShutdownTimeout: { - doc: 'How long should n8n wait for running executions before exiting worker process (seconds)', + doc: '[DEPRECATED] (Use N8N_GRACEFUL_SHUTDOWN_TIMEOUT instead) How long should n8n wait for running executions before exiting worker process (seconds)', format: Number, default: 30, env: 'QUEUE_WORKER_TIMEOUT', @@ -497,6 +497,13 @@ export const schema = { default: 'dev', env: 'N8N_RELEASE_TYPE', }, + + gracefulShutdownTimeoutInS: { + doc: 'How long should n8n process wait for components to shut down before exiting the process (seconds)', + format: Number, + default: 30, + env: 'N8N_GRACEFUL_SHUTDOWN_TIMEOUT', + }, }, // How n8n can be reached (Editor & REST-API) From 4b5ac5a07ecb3021266992b7e56c64349d714b49 Mon Sep 17 00:00:00 2001 From: Tomi Turtiainen <10324676+tomi@users.noreply.github.com> Date: Mon, 18 Dec 2023 11:44:11 +0200 Subject: [PATCH 2/2] review fixes --- packages/cli/src/commands/BaseCommand.ts | 5 +---- packages/cli/src/config/schema.ts | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/commands/BaseCommand.ts b/packages/cli/src/commands/BaseCommand.ts index 279ee42e091cb..1949bc6f69cfc 100644 --- a/packages/cli/src/commands/BaseCommand.ts +++ b/packages/cli/src/commands/BaseCommand.ts @@ -42,11 +42,8 @@ export abstract class BaseCommand extends Command { /** * How long to wait for graceful shutdown before force killing the process. - * Subclasses can override this value. */ - protected gracefulShutdownTimeoutInS: number = config.get( - 'generic.gracefulShutdownTimeoutInS', - ) as number; + protected gracefulShutdownTimeoutInS: number = config.getEnv('generic.gracefulShutdownTimeout'); async init(): Promise { await initErrorHandling(); diff --git a/packages/cli/src/config/schema.ts b/packages/cli/src/config/schema.ts index 7e99fb5fae5bf..3673c3f8640f7 100644 --- a/packages/cli/src/config/schema.ts +++ b/packages/cli/src/config/schema.ts @@ -498,7 +498,7 @@ export const schema = { env: 'N8N_RELEASE_TYPE', }, - gracefulShutdownTimeoutInS: { + gracefulShutdownTimeout: { doc: 'How long should n8n process wait for components to shut down before exiting the process (seconds)', format: Number, default: 30,