CottonВремя жизни хранилища
Время жизни хранилища

Объекты хранилища должны умирать только когда система доказала, что они мертвы.

Cotton не считает отсутствующий путь к папке или одинокий объект в бэкенде достаточным поводом удалить данные. Объекты остаются защищены, пока есть живые ссылки; освобождение откладывается, перепроверяется и координируется с приёмом.

Живые ссылкиОсторожный GCПоиск сиротКоординация приёмаБезопасность освобождения

База данных как источник истины

Cotton считает базу данных авторитетом по вопросу, жив ли объект хранилища. Объект в бэкенде сам по себе — только байты; продукту нужны явные метаданные, которые объясняют, почему объект должен выжить.

  • Манифесты файлов и чанки манифестов держат видимый контент файла живым.
  • Снимки, версии, шары и корзина могут сохранять ссылки после изменений раскладки.
  • Задача очистки рассуждает о живом контенте без слепой веры в сырой листинг бэкенда.

Живые ссылки шире, чем файлы

Файловое облако хранит больше, чем загруженные файлы. Объекты превью, аватары пользователей, защищённые артефакты бэкапов базы данных и стартовые артефакты вроде зашифрованного контрольного маркера мастер-ключа тоже требуют путей хранения.

Не каждая строка держит контент

ChunkOwnership помогает приёму и параллелизму, но не является долговечной ссылкой для хранения. Защита загрузки не должна случайно сохранять физические байты навсегда.

Сироты планируются, а не сжигаются сразу

Cotton может зарегистрировать сырые объекты бэкенда как строки чанков-сирот, чтобы GC поставил их в очередь. Освобождение откладывается, ссылки проверяются ещё раз перед удалением, и объект, ставший живым снова, не трогается.

Приём и GC договариваются

Если чанк удаляется, приём не должен вслепую наперегонки перезаливать тот же чанк. Безопаснее удержать или отклонить конфликтующую запись, дождаться удаления и потом согласовать данные из понятного состояния.

Освобождение должно быть скучным

Выигрыш в хранилище — не драматичное удаление, а предсказуемое удаление. Cotton строит очистку как операционную дисциплину, а не опасную фоновую догадку.

Цена осторожности

Осторожное освобождение требует больше дисциплины с метаданными и отложенного удаления. Для файлового облака это правильный компромисс: снимки, превью, шары, артефакты бэкапов и проверки целостности зависят от честных ссылок хранилища.

Доказательство освобождения

Сложно не хранить байты. Сложно понять, когда они правда мертвы.

Контентно-адресуемому облаку нужно настоящее свидетельство о смерти для сохранённых объектов. В Cotton удаление зависит от видимых ссылок, защищённых артефактов, задержки на хранение и последней живой проверки.

Контракт жизненного цикла хранилищаЖивые ссылки, защищённые артефакты, планирование очистки сирот, задержка на хранение и финальная перепроверка решают, можно ли байтам умереть.
01write through chunk flow
02register a live reference
03schedule orphan cleanup
04wait through retention
05recheck before delete
06cancel if live again

Видимый контент

Манифесты файлов и чанки манифестов держат пользовательские байты живыми.

Поверхности восстановления

Снимки, версии, корзина и шары могут удерживать контент после изменений раскладки.

Артефакты продукта

Превью, аватары, артефакты бэкапа и sentinel разблокировки тоже опираются на хранилище.

Финальная перепроверка

Запланированное освобождение отменяется, если объект снова стал живым до удаления.

Граница GC

ChunkOwnership координирует приём. Он не держит чанки живыми навсегда.

Разделение намеренное: защита от конкурентности страхует от гонок, а долговечные ссылки решают хранение. Так очистка не становится ни безрассудной, ни вечным пленником случайной строки.

  • Сырые объекты бэкенда не считаются живыми автоматически.
  • Объекты-сироты можно зарегистрировать и поставить в очередь на очистку.
  • GC перепроверяет ссылки перед физическим удалением.
  • Приём координируется с чанками, которые уже удаляются.
  • Новой фиче, опирающейся на хранилище, нужен явный путь ссылок.
  • Артефакты бэкапа и sentinels — защищённые объекты хранилища.
Вопросы

Прямые ответы

Почему не удалять неиспользуемые чанки сразу?

Потому что «неиспользуемый» может быть временным состоянием, пока загрузки, снимки, версии, шары, превью, артефакты бэкапов и задачи очистки пересекаются. Cotton ставит в очередь, ждёт и перепроверяет.

Сырой объект в хранилище считается живым?

Нет. Объект в бэкенде — это байты. Cotton нужна живая ссылка в базе данных или явный путь защищённого артефакта.

Что если сирота снова стал живым?

GC снимает расписание освобождения, если объект стал живым до удаления. Финальная проверка ссылок не даёт очистке драться с восстановлением или повторной загрузкой.