fix(cctv): warn once per failed background refresh; test the single flight

Attach the background-refresh warning where the refresh starts, so a
failed refresh logs once instead of once per request served meanwhile.
The test now checks that requests during a refresh share it, and turns
the hang off before releasing the fetches so a retrying loader can't
stall it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
quanticsoul4772andClaude Opus 5.5 committed 2026-10-19 05:28:56 -07:00
1 parent ca9dbea060
commit 5b12f51e98
2 files changed
+22 -10

No files matched your search

+11 -10
View File
@@ -224,21 +224,22 @@ export function createCctvCatalog({ sourceRoot = process.cwd() } = {}) {
_cctvSourceInflight = refreshCctvSources().finally(() => {
_cctvSourceInflight = null;
});
// A background refresh has no caller waiting on it: report its failure
// here, once per refresh rather than once per request it serves.
if (_cctvSourceCache.length) {
_cctvSourceInflight.catch((error) => {
console.warn(
'[CCTV] background catalog refresh failed:',
error?.message || error,
);
});
}
}
// With a catalog in hand, answer with it while the refresh runs: the
// refresh lasts as long as the slowest pack (Tarktee's DATEX feeds take up
// to its 30 s timeout), and every /api/cctv request would otherwise wait
// for it. Only the first load, with nothing to serve yet, waits.
if (_cctvSourceCache.length) {
_cctvSourceInflight.catch((error) => {
console.warn(
'[CCTV] background catalog refresh failed:',
error?.message || error,
);
});
return _cctvSourceCache;
}
return _cctvSourceInflight;
return _cctvSourceCache.length ? _cctvSourceCache : _cctvSourceInflight;
}
/**