Русское издание для чтения. Нормативным источником остаётся оригинал на английском, сверенный с ревизией
61e75e9aa9a8719dfb480bf1f5226553b3a21d70. Перевод не вводит новую редакцию спецификации.
Формат store.ChangeSet v1 задаёт каноническую оболочку запроса, используемую для вычисления хеша запроса, привязки журнала, повторного воспроизведения квитанций и идемпотентности. OKF v0.2 добавляет специализированные семантические операции, сохраняя протокол транзакций и смысл существующих операций и предусловий.
Если изменить версию формата только из-за добавления вариантов в закрытое объединение операций, существующие хеши запросов станут недействительными, а каждой реализации хранилища понадобится второй декодер оболочки, хотя отдельного контракта передачи данных не появится.
Версия формата ChangeSet остаётся 1. Новым видам операций назначаются уникальные канонические метки в нижнем регистре внутри существующего поля операции с префиксом длины:
set_generatedensure_verificationremove_verificationput_sourceremove_sourceset_usage_windowset_lifecycleput_attested_computationset_bundle_versionmigrate_v01_to_v02Метки назначаются один раз и никогда не используются повторно для другого смысла. Все следующие за меткой поля кодируются существующими детерминированными примитивами v1: беззнаковыми значениями длины фиксированной ширины, строками или байтами с префиксом длины, явными битами присутствия и списками, в которых порядок значим.
Оболочка v1 сохраняет следующие поля:
Публичное объединение типов в Go принимает только документированные конкретные значения, не являющиеся указателями. Указатели, типизированные значения nil и неизвестные варианты отклоняются до проверки или канонической обработки. Декодер или адаптер, встретив неизвестную каноническую метку, должен отклонить запрос как неподдерживаемый; пропускать, переинтерпретировать или выполнять его данные запрещено.
Канонические байты и хеши запросов всех операций и предусловий, существовавших до v0.2, сохраняются побайтно. Добавление метки изменяет только запросы, явно содержащие новую операцию. Поэтому ChangeSet v1 продолжает связывать предварительные планы, фиксацию изменений, журналы и квитанции единым протоколом.
Зафиксированные контрольные значения старого формата и тесты чувствительности к каждому полю операций служат исполняемыми проверками совместимости. Переименование или повторное использование метки, перестановка полей, неявное кодирование необязательного поля либо изменение старого примитива нарушают совместимость.
Увеличивать ChangeSetFormatVersion следует только при необходимости хотя бы одного из следующих изменений:
Будущая версия должна использовать новые эталонные значения и явный план миграции реализаций хранилища. Само по себе выделение ещё одной уникальной метки в закрытом объединении недостаточно для повышения версии формата.