"Snapshots" - code fragments sets for cpvm¶
Схема данных¶
Прототипы¶
-
PrototypeId = UUID (8 bytes), генерируется автоматом
-
По PrototypeId в KV хранятся 2 записи:
- prototype code: ByteArray
- prototype meta: FragmentPrototypeInfo
-
FragmentPrototypeInfo:
- информация о коде фрагмента (требования к среде исполнения)
- информация о владении и шаринге
- хеш кода фрагмента
-
Имеется два hash-index прототипов фрагментов:
- хеш исходного кода/байткода фрагмента (позволяет установить соответствие кода, но не метаданных)
- хеш FragmentPrototypeInfo - полный хеш прототипа (позволяет установить полное соответствие)
Снапшоты¶
Каждый снапшот - это список ссылок на прототипы (PrototypeReference), каждая из которых содержит полный путь файла внутри снапшота.
-
SnapshotKey:
- userid
- name
- tag
-
SnapshotInfo:
- метаданные снапшота
- информация о владении и шаринге
-
PrototypeReference - ссылка на прототип фрагмента, принадлежащАя кокретному снапшоту:
- SnapshotKey
- PrototypeId
- FragmentPath
Взаимодейтсвие с Runtime¶
- При запросе исполнения любого фрагмента runtime ищет в KV запись о новой версии фрагмента (PTS). Если не находит, то берет версию указанную в снапшоте, иначе берет версию из записи (путь указан для примера):
/transactions/trId/frVersions/protoypeId -> newPrototypeId
- Последние версии фрагментов, их метаданные и исходные коды агрессивно кешируются рантаймом, чтобы не лазать в KV на каждый запуск фрагмента.
Права¶
- Установка прав на отдельные файлы в снапшоте.
- Единственный плюс - можно расшарить один маленький файл вместо всей кучи.
- Чтобы установить права на отдельные файлы при заливе нужно указвать дополнительную мету в запросе.
Если ее не указать специальные права установлены не будут. В это случае два варианта:
- все файлы будут видны
- все файлы будут скрыты Последний вариант выглядит надежнее, но не отменяет того факта, что при неправильном обращении с сиситемой, права могут терятся при перемещении данных из CB и обратно.
- Скрытие уже расшаренного файла усложняется. Для важных файлов приватность теряется быстро - так работают глобальные информационные сети. Т.е. конфиденциальность можно представлять как ресурс, стремящийся к мнгновенной потере при любой ошибке.