- pluggable per-domain Repository interfaces; PostgreSQL and SQLite impls - SQLite on modernc.org/sqlite (WAL, busy_timeout, foreign_keys, immediate tx) - separate migrations/sqlite and db.MigrateSQLite; store.NewPostgres/NewSQLite - cmd/reconcile compares object storage with the journal (report, then --delete) - storage.Backend.List and photos.Repository.AllStorageKeys - DB_BACKEND/SQLITE_PATH and STORAGE_BACKEND/FS_ROOT selectable; local defaults (sqlite ./galo.db, fs ./data) - Makefile reconcile/reconcile-delete; docs and .env.example updated
2.4 KiB
2.4 KiB
Proposal
Why
Сборка мусора воркера управляется журналом objects и никогда не сканирует хранилище.
Поэтому блобы, у которых нет строки в журнале (после сброса БД в обход журнала,
исторических миграций или ошибок), накапливаются и не удаляются никогда: воркер их не
видит. Нужна ручная сверка «хранилище ∖ журнал».
What Changes
- Добавить в
storage.Backendперечисление объектов под префиксом (ключ, размер, время изменения); реализовать для S3 (ListObjectsV2) и локальной ФС (обход каталога). - Добавить в слой метаданных чтение всех ключей журнала
objects(Postgres и SQLite). - Добавить maintenance-команду
cmd/reconcile: по умолчанию — только отчёт (сироты и пропавшие), флаг--deleteудаляет сироты с учётом минимального возраста (--min-age), область ограничена префиксомobjects/. - Пропавшие ключи (есть в журнале, нет в хранилище) только сообщаются — автоматически не «исправляются».
Capabilities
New Capabilities
storage-reconciliation: ручная сверка объектного хранилища с журналом метаданных и удаление осиротевших блобов.
Modified Capabilities
Impact
backend/internal/storage(интерфейс + перечисление для S3 и ФС).backend/internal/photos(Repository.AllStorageKeys, реализации pg и sqlite).- Новый
backend/cmd/reconcile. README.md,project.md.- Не меняет API и существующие спеки; дополняет
media-objectsручной сверкой к журнальной сборке мусора.