fix(enrich): непрерывный бэкафилл (пополнять очередь когда почти пуста)
Прежнее условие «очередь пуста» почти не срабатывало — now-playing-крон держал очередь занятой, и холодный бэклог (~21k) не двигался. Теперь раз в минуту подкидываем 100 pending когда очередь почти пуста; играющие треки идут вперёд по приоритету. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -42,18 +42,18 @@ export class EnrichmentService {
|
|||||||
void this.drain();
|
void this.drain();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Периодически добираем не обогащённые треки (в т.ч. накопленные ранее).
|
// Непрерывно добираем холодный бэклог: когда очередь почти пуста — подкидываем
|
||||||
// Батч ≈ объёму, который очередь успевает прожевать за интервал при троттлинге
|
// батч pending (не-приоритетно, играющие треки всё равно идут вперёд).
|
||||||
// ~50 запросов/мин (под лимитом Discogs 60/мин) — конвейер идёт почти непрерывно.
|
// Раз в минуту, чтобы конвейер не простаивал между всплесками now-playing.
|
||||||
@Cron(CronExpression.EVERY_5_MINUTES)
|
@Cron(CronExpression.EVERY_MINUTE)
|
||||||
async backfill(): Promise<void> {
|
async backfill(): Promise<void> {
|
||||||
if (!this.discogs.enabled) return; // без токена смысла нет — не крутим вхолостую
|
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({
|
const pending = await this.prisma.track.findMany({
|
||||||
where: { enrichStatus: 'pending' },
|
where: { enrichStatus: 'pending' },
|
||||||
select: { id: true },
|
select: { id: true },
|
||||||
orderBy: { firstSeenAt: 'desc' },
|
orderBy: { firstSeenAt: 'desc' },
|
||||||
take: 240,
|
take: 100,
|
||||||
});
|
});
|
||||||
for (const t of pending) this.enqueue(t.id);
|
for (const t of pending) this.enqueue(t.id);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user