Запись каталога: один релиз пакета.
Подробнее...
#include <table_apps_releases.hpp>
Запись каталога: один релиз пакета.
Жизненный цикл записи:
setrelease создаёт row со status=active, superseded_at=0.
- Любой существующий active с тем же
(package_id, scope) переходит в superseded, superseded_at=now.
withdraw ставит status=withdrawn (релиз скомпрометирован / отозван юридически). withdrawn НЕ удаляются по TTL — храним до явной чистки.
- TTL retention:
superseded старше 90 дней удаляются inline в setrelease (до 50 за вызов) или по явному cleanup(package_id).
Решение НЕ хранить полную историю принято намеренно: каталог — это source-of-truth текущего состояния, история живёт в git/docker registry. RAM-budget при 1000 пакетов × ~10 релизов в окне = ~40K записей.
Indexing strategy:
- PK
id — auto-inc через get_global_id(_apps, "release"_n).
bypackage — выборка всех релизов пакета (CA для scope-resolver).
bypkgstat — выборка active/superseded/withdrawn внутри пакета (composite package_id<<8 | status_code); удобно для cleanup «найти все superseded для пакета X».
bysuperseded — sorted by superseded_at; используется в cleanup для нахождения самых старых записей под удаление.
- Заметки
tarball_sha256 — содержательный хэш артефакта, нужен для integrity-check при скачивании. Сама проверка — на CA-auth, контракт хэш только хранит.
- См. также
- lib/domain/table_apps_packages.hpp
◆ by_package()
| uint64_t Apps::release::by_package |
( |
| ) |
const |
|
inline |
◆ by_pkg_status()
| uint128_t Apps::release::by_pkg_status |
( |
| ) |
const |
|
inline |
◆ by_superseded()
| uint64_t Apps::release::by_superseded |
( |
| ) |
const |
|
inline |
◆ primary_key()
| uint64_t Apps::release::primary_key |
( |
| ) |
const |
|
inline |
◆ id
| uint64_t Apps::release::id |
◆ meta
| std::string Apps::release::meta |
◆ moderated_by
| name Apps::release::moderated_by |
◆ package_id
| name Apps::release::package_id |
◆ published_at
| time_point_sec Apps::release::published_at |
◆ scope
◆ status
| name Apps::release::status |
◆ superseded_at
| time_point_sec Apps::release::superseded_at |
◆ tarball_sha256
| checksum256 Apps::release::tarball_sha256 |
◆ version
| std::string Apps::release::version |
Объявления и описания членов структуры находятся в файле: