fix(core): Scheduler tasks should not trigger on follower instances (#10507)

This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™
2024-08-22 11:46:13 +02:00
committed by GitHub
parent c8ab9b1f84
commit 3428f28a73
3 changed files with 27 additions and 4 deletions

View File

@@ -1,9 +1,11 @@
import type { Workflow } from 'n8n-workflow';
import { mock } from 'jest-mock-extended';
import type { InstanceSettings } from '@/InstanceSettings';
import { ScheduledTaskManager } from '@/ScheduledTaskManager';
describe('ScheduledTaskManager', () => {
const instanceSettings = mock<InstanceSettings>({ isLeader: true });
const workflow = mock<Workflow>({ timezone: 'GMT' });
const everyMinute = '0 * * * * *';
const onTick = jest.fn();
@@ -13,7 +15,7 @@ describe('ScheduledTaskManager', () => {
beforeEach(() => {
jest.clearAllMocks();
jest.useFakeTimers();
scheduledTaskManager = new ScheduledTaskManager();
scheduledTaskManager = new ScheduledTaskManager(instanceSettings);
});
it('should throw when workflow timezone is invalid', () => {
@@ -41,6 +43,15 @@ describe('ScheduledTaskManager', () => {
expect(onTick).toHaveBeenCalledTimes(10);
});
it('should should not invoke on follower instances', async () => {
scheduledTaskManager = new ScheduledTaskManager(mock<InstanceSettings>({ isLeader: false }));
scheduledTaskManager.registerCron(workflow, everyMinute, onTick);
expect(onTick).not.toHaveBeenCalled();
jest.advanceTimersByTime(10 * 60 * 1000); // 10 minutes
expect(onTick).not.toHaveBeenCalled();
});
it('should deregister CronJobs for a workflow', async () => {
scheduledTaskManager.registerCron(workflow, everyMinute, onTick);
scheduledTaskManager.registerCron(workflow, everyMinute, onTick);