perf(backfill): stop the prefetch worker from throttling itself (Tier 1)
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled
The worker's own upstream fetches called touchActivity(), setting the prefetch:activity:<source> cooldown key (TTL 300s) that checkCooldown then honoured — so after each fetch the worker paused itself for up to ~5 minutes (re-checking every 60s, ~5 empty cycles per key). At ~1 fetch / 5 min the 3387-job backlog needed ~6 days to drain. - Wrap each worker job in an AsyncLocalStorage backfill context; touchActivity skips the cooldown key when invoked from the worker, so the cooldown reflects only real user requests (worker yields to users, never to itself). - Cooldown TTL 300s -> 90s (a request 5 min ago isn't "active"). - checkCooldown pauses for the key's actual remaining TTL (one wait) instead of a fixed 60s re-check loop. No extra upstream load — only removes the worker's self-imposed idle time. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -20,6 +20,7 @@ import {
|
||||
import { ConfigService } from "@nestjs/config";
|
||||
|
||||
import { ProxyAgent } from "undici";
|
||||
import { isBackfillContext } from "../../jobs/prefetch-context";
|
||||
import { RedisService } from "../../redis/redis.service";
|
||||
import { EmexBrowserService } from "./emex.browser";
|
||||
import { createEmptyDecodedVehicle, mapEmexResponse } from "./emex.mapper";
|
||||
@@ -143,8 +144,11 @@ export class EmexService {
|
||||
|
||||
/** Mark EMEX as actively used (5min TTL) to defer prefetch worker */
|
||||
private async touchActivity(): Promise<void> {
|
||||
// Worker-originated fetches must NOT register as user activity, or the
|
||||
// backfill worker throttles itself via checkCooldown.
|
||||
if (isBackfillContext()) return;
|
||||
try {
|
||||
await this.redis.set("prefetch:activity:emex", String(Date.now()), 300);
|
||||
await this.redis.set("prefetch:activity:emex", String(Date.now()), 90);
|
||||
} catch {
|
||||
// Non-critical — don't break the request
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user