From 743e555a1b88382d827b8db5cb1fed830b40d634 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Oct 2026 17:59:03 +0200 Subject: [PATCH] fix(deps): update dependency bullmq to v6 (#31914) Co-authored-by: Daniel Dietzler --- e2e/src/utils.ts | 4 ++-- open-api/immich-openapi-specs.json | 21 ++++++++++++++++--- packages/sdk/src/fetch-client.ts | 3 +-- server/package.json | 2 +- server/src/dtos/queue.dto.ts | 11 +++++++++- server/src/enum.ts | 1 - server/src/repositories/job.repository.ts | 1 - server/src/services/person.service.spec.ts | 6 ------ server/src/services/queue.service.ts | 2 +- server/src/types.ts | 1 - .../specs/services/person.service.spec.ts | 4 ++-- web/src/routes/admin/queues/QueueCard.svelte | 2 +- .../routes/admin/queues/[name]/+page.svelte | 2 +- web/src/routes/admin/queues/[name]/+page.ts | 2 +- .../admin/queues/[name]/QueueGraph.svelte | 2 +- 15 files changed, 39 insertions(+), 25 deletions(-) diff --git a/e2e/src/utils.ts b/e2e/src/utils.ts index 94f747eff..c68de73cf 100644 --- a/e2e/src/utils.ts +++ b/e2e/src/utils.ts @@ -657,13 +657,13 @@ export const utils = { isQueueEmpty: async (accessToken: string, queue: keyof QueuesResponseLegacyDto) => { const queues = await getQueuesLegacy({ headers: asBearerAuth(accessToken) }); const jobCounts = queues[queue].jobCounts; - return !jobCounts.active && !jobCounts.waiting; + return !jobCounts.active && (!jobCounts.waiting || queues[queue].queueStatus.isPaused); }, waitForQueueFinish: (accessToken: string, queue: keyof QueuesResponseLegacyDto, ms?: number) => { // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve, reject) => { - const timeout = setTimeout(() => reject(new Error('Timed out waiting for queue to empty')), ms || 10_000); + const timeout = setTimeout(() => reject(new Error('Timed out waiting for queue to empty')), ms || 15_000); while (true) { const done = await utils.isQueueEmpty(accessToken, queue); diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 2294c6a8e..3baa5b8fb 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -26183,8 +26183,7 @@ "failed", "completed", "delayed", - "waiting", - "paused" + "waiting" ], "type": "string" }, @@ -26278,7 +26277,23 @@ "description": "Number of paused jobs", "maximum": 9007199254740991, "minimum": -9007199254740991, - "type": "integer" + "type": "integer", + "x-immich-history": [ + { + "version": "v2.0.0", + "state": "Added" + }, + { + "version": "v4.0.0", + "state": "Updated", + "description": "A paused queue will now also shows its job as `waiting`" + }, + { + "version": "v4.0.0", + "state": "Deprecated" + } + ], + "x-immich-state": "Deprecated" }, "waiting": { "description": "Number of waiting jobs", diff --git a/packages/sdk/src/fetch-client.ts b/packages/sdk/src/fetch-client.ts index 5dea6b83e..3747578af 100644 --- a/packages/sdk/src/fetch-client.ts +++ b/packages/sdk/src/fetch-client.ts @@ -8436,8 +8436,7 @@ export enum QueueJobStatus { Failed = "failed", Completed = "completed", Delayed = "delayed", - Waiting = "waiting", - Paused = "paused" + Waiting = "waiting" } export enum JobName { AssetDelete = "AssetDelete", diff --git a/server/package.json b/server/package.json index 940e42450..90f0edb81 100644 --- a/server/package.json +++ b/server/package.json @@ -66,7 +66,7 @@ "async-lock": "^1.4.0", "bcrypt": "^6.0.0", "body-parser": "^2.2.0", - "bullmq": "^5.51.0", + "bullmq": "^6.0.0", "chokidar": "^4.0.3", "compression": "^1.8.0", "cookie": "^1.0.2", diff --git a/server/src/dtos/queue.dto.ts b/server/src/dtos/queue.dto.ts index 7013899fb..0a57c2e7f 100644 --- a/server/src/dtos/queue.dto.ts +++ b/server/src/dtos/queue.dto.ts @@ -54,7 +54,16 @@ export const QueueStatisticsSchema = z failed: z.int().describe('Number of failed jobs'), delayed: z.int().describe('Number of delayed jobs'), waiting: z.int().describe('Number of waiting jobs'), - paused: z.int().describe('Number of paused jobs'), + paused: z + .int() + .describe('Number of paused jobs') + .meta( + new HistoryBuilder() + .added('v2.0.0') + .updated('v4.0.0', 'A paused queue will now also shows its job as `waiting`') + .deprecated('v4.0.0') + .getExtensions(), + ), }) .meta({ id: 'QueueStatisticsDto' }); diff --git a/server/src/enum.ts b/server/src/enum.ts index cd978257b..4151c88d7 100644 --- a/server/src/enum.ts +++ b/server/src/enum.ts @@ -869,7 +869,6 @@ export enum QueueJobStatus { Complete = 'completed', Delayed = 'delayed', Waiting = 'waiting', - Paused = 'paused', } export const QueueJobStatusSchema = z.enum(QueueJobStatus).describe('Queue job status').meta({ id: 'QueueJobStatus' }); diff --git a/server/src/repositories/job.repository.ts b/server/src/repositories/job.repository.ts index 77bb30840..4a3b78c82 100644 --- a/server/src/repositories/job.repository.ts +++ b/server/src/repositories/job.repository.ts @@ -187,7 +187,6 @@ export class JobRepository { 'failed', 'delayed', 'waiting', - 'paused', ) as unknown as Promise; } diff --git a/server/src/services/person.service.spec.ts b/server/src/services/person.service.spec.ts index 01319f81f..6428e8c39 100644 --- a/server/src/services/person.service.spec.ts +++ b/server/src/services/person.service.spec.ts @@ -898,7 +898,6 @@ describe(PersonService.name, () => { mocks.job.getJobCounts.mockResolvedValue({ active: 1, waiting: 0, - paused: 0, completed: 0, failed: 0, delayed: 0, @@ -915,7 +914,6 @@ describe(PersonService.name, () => { mocks.job.getJobCounts.mockResolvedValue({ active: 1, waiting: 1, - paused: 0, completed: 0, failed: 0, delayed: 0, @@ -931,7 +929,6 @@ describe(PersonService.name, () => { mocks.job.getJobCounts.mockResolvedValue({ active: 1, waiting: 0, - paused: 0, completed: 0, failed: 0, delayed: 0, @@ -962,7 +959,6 @@ describe(PersonService.name, () => { mocks.job.getJobCounts.mockResolvedValue({ active: 1, waiting: 0, - paused: 0, completed: 0, failed: 0, delayed: 0, @@ -994,7 +990,6 @@ describe(PersonService.name, () => { mocks.job.getJobCounts.mockResolvedValue({ active: 1, waiting: 0, - paused: 0, completed: 0, failed: 0, delayed: 0, @@ -1049,7 +1044,6 @@ describe(PersonService.name, () => { mocks.job.getJobCounts.mockResolvedValue({ active: 1, waiting: 0, - paused: 0, completed: 0, failed: 0, delayed: 0, diff --git a/server/src/services/queue.service.ts b/server/src/services/queue.service.ts index cc7fc7515..425b1a1fd 100644 --- a/server/src/services/queue.service.ts +++ b/server/src/services/queue.service.ts @@ -185,7 +185,7 @@ export class QueueService extends BaseService { this.jobRepository.getJobCounts(name), this.jobRepository.isPaused(name), ]); - return { name, isPaused, statistics }; + return { name, isPaused, statistics: { ...statistics, paused: 0 } }; } private async start(name: QueueName, { force }: QueueCommandDto): Promise { diff --git a/server/src/types.ts b/server/src/types.ts index 194b6cef9..31973a055 100644 --- a/server/src/types.ts +++ b/server/src/types.ts @@ -343,7 +343,6 @@ export interface JobCounts { failed: number; delayed: number; waiting: number; - paused: number; } export type JobItem = diff --git a/server/test/medium/specs/services/person.service.spec.ts b/server/test/medium/specs/services/person.service.spec.ts index 7b124e091..a6a1f88e5 100644 --- a/server/test/medium/specs/services/person.service.spec.ts +++ b/server/test/medium/specs/services/person.service.spec.ts @@ -518,7 +518,7 @@ describe(PersonService.name, () => { const jobRepo = ctx.getMock(JobRepository); ctx.getMock(StorageRepository).unlink.mockResolvedValue(); jobRepo.waitForQueueCompletion.mockResolvedValue(); - jobRepo.getJobCounts.mockResolvedValue({ active: 0, waiting: 0, completed: 0, delayed: 0, failed: 0, paused: 0 }); + jobRepo.getJobCounts.mockResolvedValue({ active: 0, waiting: 0, completed: 0, delayed: 0, failed: 0 }); jobRepo.queueAll.mockResolvedValue(); const { user } = await ctx.newUser(); @@ -549,7 +549,7 @@ describe(PersonService.name, () => { const jobRepo = ctx.getMock(JobRepository); ctx.getMock(StorageRepository).unlink.mockResolvedValue(); jobRepo.waitForQueueCompletion.mockResolvedValue(); - jobRepo.getJobCounts.mockResolvedValue({ active: 0, waiting: 0, completed: 0, delayed: 0, failed: 0, paused: 0 }); + jobRepo.getJobCounts.mockResolvedValue({ active: 0, waiting: 0, completed: 0, delayed: 0, failed: 0 }); jobRepo.queueAll.mockResolvedValue(); const { user } = await ctx.newUser(); diff --git a/web/src/routes/admin/queues/QueueCard.svelte b/web/src/routes/admin/queues/QueueCard.svelte index 645feff87..171e917b0 100644 --- a/web/src/routes/admin/queues/QueueCard.svelte +++ b/web/src/routes/admin/queues/QueueCard.svelte @@ -36,7 +36,7 @@ const { icon, title, subtitle } = $derived(asQueueItem($t, queue)); const { statistics } = $derived(queue); - let waitingCount = $derived(statistics.waiting + statistics.paused + statistics.delayed); + let waitingCount = $derived(statistics.waiting + statistics.delayed); let isIdle = $derived(statistics.active + statistics.waiting === 0 && !queue.isPaused); let multipleButtons = $derived(allText || refreshText); diff --git a/web/src/routes/admin/queues/[name]/+page.svelte b/web/src/routes/admin/queues/[name]/+page.svelte index 3adf607d7..ed579445a 100644 --- a/web/src/routes/admin/queues/[name]/+page.svelte +++ b/web/src/routes/admin/queues/[name]/+page.svelte @@ -53,7 +53,7 @@
{$t('active_count', { values: { count: queue.statistics.active } })} - {$t('waiting_count', { values: { count: queue.statistics.waiting + queue.statistics.paused } })} + {$t('waiting_count', { values: { count: queue.statistics.waiting } })} {#if queue.statistics.failed > 0} {$t('failed_count', { values: { count: queue.statistics.failed } })} {/if} diff --git a/web/src/routes/admin/queues/[name]/+page.ts b/web/src/routes/admin/queues/[name]/+page.ts index 446485e4f..05cdbe2c2 100644 --- a/web/src/routes/admin/queues/[name]/+page.ts +++ b/web/src/routes/admin/queues/[name]/+page.ts @@ -15,7 +15,7 @@ export const load = (async ({ params, url }) => { const [queue, failedJobs] = await Promise.all([ getQueue({ name }), - getQueueJobs({ name, status: [QueueJobStatus.Failed, QueueJobStatus.Paused] }), + getQueueJobs({ name, status: [QueueJobStatus.Failed] }), ]); const $t = await getFormatter(); diff --git a/web/src/routes/admin/queues/[name]/QueueGraph.svelte b/web/src/routes/admin/queues/[name]/QueueGraph.svelte index ba8d3d101..50a8e08a8 100644 --- a/web/src/routes/admin/queues/[name]/QueueGraph.svelte +++ b/web/src/routes/admin/queues/[name]/QueueGraph.svelte @@ -35,7 +35,7 @@ if (statistics) { items[1].push(statistics.failed); items[2].push(statistics.active); - items[3].push(statistics.waiting + statistics.paused); + items[3].push(statistics.waiting); } else { items[0].push(timestamp); items[1].push(null);