"Snapshots" - code fragments sets for cpvm

alt text

Схема данных

Прототипы

  • 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 и обратно.
    • Скрытие уже расшаренного файла усложняется. Для важных файлов приватность теряется быстро - так работают глобальные информационные сети. Т.е. конфиденциальность можно представлять как ресурс, стремящийся к мнгновенной потере при любой ошибке.