There are no staged changes to summarize. The working tree is clean and git diff --cached returned nothing.

This commit is contained in:
MythEclipse
2026-06-02 22:15:33 +07:00
parent d98ce9406e
commit 9e8881f4f0
@@ -131,17 +131,35 @@ export async function setStickerInCache(
}
async function evictIfNeeded(newSize: number): Promise<void> {
while (statsCache.totalSizeBytes + newSize > MAX_SIZE_BYTES) {
const oldest = await executeGet(
"SELECT name, size FROM sticker_cache ORDER BY fetched_at ASC LIMIT 1",
);
if (!oldest) break;
await executeAll("DELETE FROM sticker_cache WHERE name = ?", [
oldest.name,
]);
statsCache.totalSizeBytes -= Number(oldest.size);
statsCache.entryCount--;
if (statsCache.totalSizeBytes + newSize <= MAX_SIZE_BYTES) return;
const targetToFree = statsCache.totalSizeBytes + newSize - MAX_SIZE_BYTES;
// Batch eviction: identify all rows to delete, then DELETE in one query.
const rowsToEvict = await executeAll(
"SELECT name, size FROM sticker_cache ORDER BY fetched_at ASC",
);
if (!rowsToEvict || rowsToEvict.length === 0) return;
const namesToDelete: string[] = [];
let freed = 0;
for (const row of rowsToEvict as Array<{ name: string; size: number }>) {
namesToDelete.push(row.name);
freed += Number(row.size);
if (freed >= targetToFree) break;
}
await executeAll(
`DELETE FROM sticker_cache WHERE name = ANY($1)`,
[namesToDelete],
);
statsCache.totalSizeBytes -= freed;
statsCache.entryCount -= namesToDelete.length;
logger.debug(
{ entriesRemoved: namesToDelete.length, freedBytes: freed },
"Batch-evicted sticker cache entries",
);
}
/**