- archive local-fs-storage-backend, sqlite-metadata-backend, storage-orphan-reconciliation, metadata-managed-jwt-secret, default-local-backends - sync specs: storage-backends, metadata-backends, storage-reconciliation, app-secrets; update photos/share-links - defaults reflected in specs: SQLite and local FS
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ручной сверкой к журнальной сборке мусора.