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> { async function evictIfNeeded(newSize: number): Promise<void> {
while (statsCache.totalSizeBytes + newSize > MAX_SIZE_BYTES) { if (statsCache.totalSizeBytes + newSize <= MAX_SIZE_BYTES) return;
const oldest = await executeGet(
"SELECT name, size FROM sticker_cache ORDER BY fetched_at ASC LIMIT 1", const targetToFree = statsCache.totalSizeBytes + newSize - MAX_SIZE_BYTES;
);
if (!oldest) break; // Batch eviction: identify all rows to delete, then DELETE in one query.
await executeAll("DELETE FROM sticker_cache WHERE name = ?", [ const rowsToEvict = await executeAll(
oldest.name, "SELECT name, size FROM sticker_cache ORDER BY fetched_at ASC",
]); );
statsCache.totalSizeBytes -= Number(oldest.size); if (!rowsToEvict || rowsToEvict.length === 0) return;
statsCache.entryCount--;
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",
);
} }
/** /**