From 6fec82b772c552f806bc88d22908ca03f54b85e6 Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Thu, 14 May 2026 10:20:50 +0200 Subject: [PATCH] fix: no lock on queue duplicates --- server/src/services/duplicate.service.ts | 40 +++++++++++------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/server/src/services/duplicate.service.ts b/server/src/services/duplicate.service.ts index 89d0209fdc..f854796b69 100644 --- a/server/src/services/duplicate.service.ts +++ b/server/src/services/duplicate.service.ts @@ -300,30 +300,28 @@ export class DuplicateService extends BaseService { @OnJob({ name: JobName.AssetDetectDuplicatesQueueAll, queue: QueueName.DuplicateDetection }) async handleQueueSearchDuplicates({ force }: JobOf): Promise { - return this.databaseRepository.withLock(DatabaseLock.DuplicateDetection, async () => { - const { machineLearning } = await this.getConfig({ withCache: false }); - if (!isDuplicateDetectionEnabled(machineLearning)) { - return JobStatus.Skipped; + const { machineLearning } = await this.getConfig({ withCache: false }); + if (!isDuplicateDetectionEnabled(machineLearning)) { + return JobStatus.Skipped; + } + + let jobs: JobItem[] = []; + const queueAll = async () => { + await this.jobRepository.queueAll(jobs); + jobs = []; + }; + + const assets = this.assetJobRepository.streamForSearchDuplicates(force); + for await (const asset of assets) { + jobs.push({ name: JobName.AssetDetectDuplicates, data: { id: asset.id } }); + if (jobs.length >= JOBS_ASSET_PAGINATION_SIZE) { + await queueAll(); } + } - let jobs: JobItem[] = []; - const queueAll = async () => { - await this.jobRepository.queueAll(jobs); - jobs = []; - }; + await queueAll(); - const assets = this.assetJobRepository.streamForSearchDuplicates(force); - for await (const asset of assets) { - jobs.push({ name: JobName.AssetDetectDuplicates, data: { id: asset.id } }); - if (jobs.length >= JOBS_ASSET_PAGINATION_SIZE) { - await queueAll(); - } - } - - await queueAll(); - - return JobStatus.Success; - }); + return JobStatus.Success; } @OnJob({ name: JobName.AssetDetectDuplicates, queue: QueueName.DuplicateDetection })