From b1ab21aa0420526f72af7fb8775f3e3aa4d48412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Wed, 9 Oct 2024 12:11:46 +0200 Subject: [PATCH] refactor(core): Deregistering cronjobs should also release them (no-changelog) (#11179) --- packages/core/src/ScheduledTaskManager.ts | 5 +++-- packages/core/test/ScheduledTaskManager.test.ts | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/core/src/ScheduledTaskManager.ts b/packages/core/src/ScheduledTaskManager.ts index fd2bb525a9..00396903a5 100644 --- a/packages/core/src/ScheduledTaskManager.ts +++ b/packages/core/src/ScheduledTaskManager.ts @@ -30,8 +30,9 @@ export class ScheduledTaskManager { deregisterCrons(workflowId: string) { const cronJobs = this.cronJobs.get(workflowId) ?? []; - for (const cronJob of cronJobs) { - cronJob.stop(); + while (cronJobs.length) { + const cronJob = cronJobs.pop(); + if (cronJob) cronJob.stop(); } } diff --git a/packages/core/test/ScheduledTaskManager.test.ts b/packages/core/test/ScheduledTaskManager.test.ts index 3ff8837ca9..5166240856 100644 --- a/packages/core/test/ScheduledTaskManager.test.ts +++ b/packages/core/test/ScheduledTaskManager.test.ts @@ -56,8 +56,13 @@ describe('ScheduledTaskManager', () => { scheduledTaskManager.registerCron(workflow, everyMinute, onTick); scheduledTaskManager.registerCron(workflow, everyMinute, onTick); scheduledTaskManager.registerCron(workflow, everyMinute, onTick); + + expect(scheduledTaskManager.cronJobs.get(workflow.id)?.length).toBe(3); + scheduledTaskManager.deregisterCrons(workflow.id); + expect(scheduledTaskManager.cronJobs.get(workflow.id)?.length).toBe(0); + expect(onTick).not.toHaveBeenCalled(); jest.advanceTimersByTime(10 * 60 * 1000); // 10 minutes expect(onTick).not.toHaveBeenCalled();