Для AI-агентов: markdown этой страницы — /docs-content/source-storage/retention.md индекс документации — /llms.txt

Срок жизни версий и очистка

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

Обзор хранилища и справочник эндпоинтов — Хранилище исходного кода.

Срок жизни версий (политика хранения)

После сохранения версия проходит через автоматическую очистку по графику «дед-отец-сын» (Grandfather-Father-Son):

  1. Последние 5 версий хранятся всегда, независимо от тегов.
  2. Дневная сетка за 14 дней — одна версия на каждый календарный день (UTC).
  3. Недельная сетка за 4 недели — одна версия на каждые 7 дней.
  4. Версии с тегом published или manual — хранятся бессрочно, никогда не удаляются автоматически.

Для пользовательской очистки на запрос — POST /v1/apps/:id/sources/cleanup. Версии с тегами published и manual исключаются и из неё.

Автоматическая очистка выполняется раз в сутки по расписанию, а не в момент сохранения новой версии или удаления сервера. Версия, попавшая под правила выше, остаётся видимой до ближайшего суточного прогона.

Версии удалённого сервера

Исходники переживают сервер: после DELETE /v1/infra/servers/:id версии остаются на месте и доступны для просмотра и скачивания.

Что происходит с объектами удалённого сервера:

  • Версии сохраняются — удаление сервера их не трогает. Автоматическая очистка продолжает применять к ним обычную политику хранения, описанную выше.
  • Указатель на последнюю версию снимает суточная очистка — объект source/current.<расширение> остаётся видимым в хранилище до ближайшего прогона. Что это за объект — раздел «Снимки в объектном хранилище» ниже.

Если версии удалённого сервера больше не нужны, уберите их вручную. Действие необратимо: восстановить версию через API нельзя, а сохранить новую на удалённом сервере уже не получится — POST …/sources отвечает 404. Скачайте нужное до очистки.

  1. Найдите сервер — GET /v1/infra/servers?includeDeleted=true. Без этого параметра удалённые серверы в выдачу не попадают.
  2. Снимите защитные теги с версий, которые тоже хотите убрать, — POST /v1/infra/servers/:id/sources/:versionId/tag с телом {"tag": "manual", "action": "remove"}. Эта операция снимает один тег и не трогает остальные метки версии.
  3. Очистите историю — POST /v1/infra/servers/:id/sources/cleanup с телом {"keepLatest": 0}. Эндпоинт работает и на удалённом сервере. Версии, у которых остались теги manual или published, очистка не трогает.

Удалённые версии сразу перестают учитываться в объёме хранилища, сами байты стираются через 30 суток — см. Хранилище.

Снимки в объектном хранилище

Снимки исходного кода лежат в том же объектном хранилище, что и остальные файлы приложения, и видны в GET /v1/storage/objects по префиксу source/. Под этим префиксом два вида объектов:

Ключ Что это
source/versions/v<N>-… Сохранённая версия. Ей соответствует запись v<N> в списке версий.
source/current.<расширение> Указатель на последнюю сохранённую версию. Расширение соответствует формату архива последнего сохранения.

У приложений, которые сохраняли снимки через POST /v1/apps/:id/sources, под тем же префиксом лежат source/manifest.json — список версий в читаемом виде — и source/README.md с описанием содержимого.

Логический ключ source/current.tar.gz повторяется: у каждого владельца свой указатель, а физически объекты лежат в разных пространствах имён. Несколько строк с одним и тем же ключом в ответе GET /v1/storage/objects означают разных владельцев — серверы или приложения, — а не перезапись одного объекта. Различить их можно по полю id.

Снимками управляют операциями с исходниками — удалением версии и массовой очисткой: они адресуют версию по её владельцу. Запрос DELETE /v1/storage/objects/:key для снимков не подходит: он ищет строку по логическому ключу среди всех доступных вызывающему ключу, а ключ source/current.tar.gz у разных владельцев одинаковый — удалится произвольная из них.

Смотрите также