comicbox.formats.base.online.vacuum

source module comicbox.formats.base.online.vacuum

Conditional SQLite VACUUM for the online caches.

mokkari deletes expired rows when its cache opens, and the ComicVine source purges simyan’s requests_cache explicitly at client build — but neither path ever VACUUMs. A DELETE only moves pages onto the free list, it doesn’t return them to the OS, so the file keeps its high-water-mark size. This reclaims that space, but only when there’s enough of it to justify rewriting the whole file.

The trigger is the free-page ratio, not the calendar or the raw file size

VACUUM exists to reclaim free pages, so we vacuum exactly when there are enough of them. It’s self-limiting — a freshly vacuumed db has ~0 free pages, so it won’t re-trigger until expiry deletes accumulate again — and needs no persisted “last vacuumed” state.

Functions

  • vacuum_if_bloated — VACUUM a sqlite cache only when reclaimable space is worth it.

source vacuum_if_bloated(db_path: Path | str) → bool

VACUUM a sqlite cache only when reclaimable space is worth it.

Returns True if a VACUUM ran. A cheap no-op (one PRAGMA pair, or less) for missing, small, or already-compact files. Best-effort housekeeping: a locked, busy, or corrupt db is skipped rather than allowed to fail a lookup.