From 354b88383c2f2e8672f9e34595783731cfbd8905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivar=20Conradi=20=C3=98sthus?= Date: Mon, 5 Feb 2024 11:04:13 +0100 Subject: [PATCH] fix: schduler-service graceful shutdown (#6125) When a stop signal is sent to Unleash the scheduler-service should cancel any scheduled jobs. This also applies to the job scheduled for initial execution with jitter. We observed that initial jobs was executed after the database connections are terminated. This appears after v5.9.0 of Unleash. ``` Error: aborted at Object.queryBuilder (/unleash/node_modules/knex/lib/knex-builder/make-knex.js:112:26) at createQueryBuilder (/unleash/node_modules/knex/lib/knex-builder/make-knex.js:320:26) at EventStore.knex [as db] (/unleash/node_modules/knex/lib/knex-builder/make-knex.js:101:12) at EventStore.setUnannouncedToAnnounced (/unleash/node_modules/unleash-server/dist/lib/features/events/event-store.js:286:33) at EventStore.publishUnannouncedEvents (/unleash/node_modules/unleash-server/dist/lib/features/events/event-store.js:293:35) at EventAnnouncer.publishUnannouncedEvents (/unleash/node_modules/unleash-server/dist/lib/services/event-announcer-service.js:9:32) at runScheduledFunctionWithEvent (/unleash/node_modules/unleash-server/dist/lib/features/scheduler/scheduler-service.js:30:23) at Timeout. (/unleash/node_modules/unleash-server/dist/lib/features/scheduler/scheduler-service.js:50:27) at runNextTicks (node:internal/process/task_queues:60:5) at process.processTimers (node:internal/timers:509:9) ``` --- src/lib/features/scheduler/scheduler-service.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lib/features/scheduler/scheduler-service.ts b/src/lib/features/scheduler/scheduler-service.ts index c4511e3ab0..1e95b3479d 100644 --- a/src/lib/features/scheduler/scheduler-service.ts +++ b/src/lib/features/scheduler/scheduler-service.ts @@ -93,9 +93,11 @@ export class SchedulerService { if (!maintenanceMode) { if (jitter) { - setTimeout(() => { - runScheduledFunctionWithEvent(); - }, jitter); + const id = setTimeout( + () => runScheduledFunctionWithEvent(), + jitter, + ); + this.intervalIds.push(id); } else { await runScheduledFunctionWithEvent(); }