From dcc2f599f98f69062fa2ed40c19b0b22e0425ec3 Mon Sep 17 00:00:00 2001 From: nk Date: Wed, 3 Jun 2026 15:05:51 +0300 Subject: [PATCH] =?UTF-8?q?fix(enrich):=20=D0=BD=D0=B5=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D1=80=D1=8B=D0=B2=D0=BD=D1=8B=D0=B9=20=D0=B1=D1=8D=D0=BA=D0=B0?= =?UTF-8?q?=D1=84=D0=B8=D0=BB=D0=BB=20(=D0=BF=D0=BE=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=BD=D1=8F=D1=82=D1=8C=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D1=8C=20=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0=20=D0=BF=D0=BE=D1=87?= =?UTF-8?q?=D1=82=D0=B8=20=D0=BF=D1=83=D1=81=D1=82=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Прежнее условие «очередь пуста» почти не срабатывало — now-playing-крон держал очередь занятой, и холодный бэклог (~21k) не двигался. Теперь раз в минуту подкидываем 100 pending когда очередь почти пуста; играющие треки идут вперёд по приоритету. Co-Authored-By: Claude Opus 4.8 --- src/enrich/enrichment.service.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/enrich/enrichment.service.ts b/src/enrich/enrichment.service.ts index ffac9cd..3353ef7 100644 --- a/src/enrich/enrichment.service.ts +++ b/src/enrich/enrichment.service.ts @@ -42,18 +42,18 @@ export class EnrichmentService { void this.drain(); } - // Периодически добираем не обогащённые треки (в т.ч. накопленные ранее). - // Батч ≈ объёму, который очередь успевает прожевать за интервал при троттлинге - // ~50 запросов/мин (под лимитом Discogs 60/мин) — конвейер идёт почти непрерывно. - @Cron(CronExpression.EVERY_5_MINUTES) + // Непрерывно добираем холодный бэклог: когда очередь почти пуста — подкидываем + // батч pending (не-приоритетно, играющие треки всё равно идут вперёд). + // Раз в минуту, чтобы конвейер не простаивал между всплесками now-playing. + @Cron(CronExpression.EVERY_MINUTE) async backfill(): Promise { if (!this.discogs.enabled) return; // без токена смысла нет — не крутим вхолостую - if (this.running || this.queue.length > 0) return; // ещё жуём прошлый батч + if (this.queue.length > this.concurrency) return; // ещё есть что жевать const pending = await this.prisma.track.findMany({ where: { enrichStatus: 'pending' }, select: { id: true }, orderBy: { firstSeenAt: 'desc' }, - take: 240, + take: 100, }); for (const t of pending) this.enqueue(t.id); }