mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 10:31:15 +00:00
fix(core): Account for waiting jobs during shutdown (#11338)
This commit is contained in:
@@ -56,6 +56,7 @@ describe('ScalingService', () => {
|
||||
let registerWorkerListenersSpy: jest.SpyInstance;
|
||||
let scheduleQueueRecoverySpy: jest.SpyInstance;
|
||||
let stopQueueRecoverySpy: jest.SpyInstance;
|
||||
let stopQueueMetricsSpy: jest.SpyInstance;
|
||||
let getRunningJobsCountSpy: jest.SpyInstance;
|
||||
|
||||
const bullConstructorArgs = [
|
||||
@@ -99,6 +100,9 @@ describe('ScalingService', () => {
|
||||
scheduleQueueRecoverySpy = jest.spyOn(scalingService, 'scheduleQueueRecovery');
|
||||
// @ts-expect-error Private method
|
||||
stopQueueRecoverySpy = jest.spyOn(scalingService, 'stopQueueRecovery');
|
||||
|
||||
// @ts-expect-error Private method
|
||||
stopQueueMetricsSpy = jest.spyOn(scalingService, 'stopQueueMetrics');
|
||||
});
|
||||
|
||||
describe('setupQueue', () => {
|
||||
@@ -180,15 +184,37 @@ describe('ScalingService', () => {
|
||||
});
|
||||
|
||||
describe('stop', () => {
|
||||
it('should pause queue, wait for running jobs, stop queue recovery', async () => {
|
||||
await scalingService.setupQueue();
|
||||
jobProcessor.getRunningJobIds.mockReturnValue([]);
|
||||
describe('if main', () => {
|
||||
it('should pause queue, stop queue recovery and queue metrics', async () => {
|
||||
// @ts-expect-error readonly property
|
||||
instanceSettings.instanceType = 'main';
|
||||
await scalingService.setupQueue();
|
||||
// @ts-expect-error readonly property
|
||||
scalingService.queueRecoveryContext.timeout = 1;
|
||||
jest.spyOn(scalingService, 'isQueueMetricsEnabled', 'get').mockReturnValue(true);
|
||||
|
||||
await scalingService.stop();
|
||||
await scalingService.stop();
|
||||
|
||||
expect(queue.pause).toHaveBeenCalledWith(true, true);
|
||||
expect(stopQueueRecoverySpy).toHaveBeenCalled();
|
||||
expect(getRunningJobsCountSpy).toHaveBeenCalled();
|
||||
expect(getRunningJobsCountSpy).not.toHaveBeenCalled();
|
||||
expect(queue.pause).toHaveBeenCalledWith(true, true);
|
||||
expect(stopQueueRecoverySpy).toHaveBeenCalled();
|
||||
expect(stopQueueMetricsSpy).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('if worker', () => {
|
||||
it('should wait for running jobs to finish', async () => {
|
||||
// @ts-expect-error readonly property
|
||||
instanceSettings.instanceType = 'worker';
|
||||
await scalingService.setupQueue();
|
||||
jobProcessor.getRunningJobIds.mockReturnValue([]);
|
||||
|
||||
await scalingService.stop();
|
||||
|
||||
expect(getRunningJobsCountSpy).toHaveBeenCalled();
|
||||
expect(queue.pause).not.toHaveBeenCalled();
|
||||
expect(stopQueueRecoverySpy).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user