База данных как источник истины
Cotton считает базу данных авторитетом по вопросу, жив ли объект хранилища. Объект в бэкенде сам по себе — только байты; продукту нужны явные метаданные, которые объясняют, почему объект должен выжить.
- Манифесты файлов и чанки манифестов держат видимый контент файла живым.
- Снимки, версии, шары и корзина могут сохранять ссылки после изменений раскладки.
- Задача очистки рассуждает о живом контенте без слепой веры в сырой листинг бэкенда.
Живые ссылки шире, чем файлы
Файловое облако хранит больше, чем загруженные файлы. Объекты превью, аватары пользователей, защищённые артефакты бэкапов базы данных и стартовые артефакты вроде зашифрованного контрольного маркера мастер-ключа тоже требуют путей хранения.
Не каждая строка держит контент
ChunkOwnership помогает приёму и параллелизму, но не является долговечной ссылкой для хранения. Защита загрузки не должна случайно сохранять физические байты навсегда.
Сироты планируются, а не сжигаются сразу
Cotton может зарегистрировать сырые объекты бэкенда как строки чанков-сирот, чтобы GC поставил их в очередь. Освобождение откладывается, ссылки проверяются ещё раз перед удалением, и объект, ставший живым снова, не трогается.
Приём и GC договариваются
Если чанк удаляется, приём не должен вслепую наперегонки перезаливать тот же чанк. Безопаснее удержать или отклонить конфликтующую запись, дождаться удаления и потом согласовать данные из понятного состояния.
Освобождение должно быть скучным
Выигрыш в хранилище — не драматичное удаление, а предсказуемое удаление. Cotton строит очистку как операционную дисциплину, а не опасную фоновую догадку.
Цена осторожности
Осторожное освобождение требует больше дисциплины с метаданными и отложенного удаления. Для файлового облака это правильный компромисс: снимки, превью, шары, артефакты бэкапов и проверки целостности зависят от честных ссылок хранилища.