Историческое техническое задание из ревизии 61e75e9. Требования описывают запланированную тогда работу, а не текущие инструкции по использованию. Исходный документ.
Техническое задание: согласовать декодирование журнала с ограничениями данных
1. Проблема
Config.Validate допускает увеличение ограничений до абсолютных пределов. Запись и чтение подготовленных данных используют действующую Config, но декодер журнала жёстко задаёт стандартные пределы 256 MiB/1 GiB. Корректная транзакция с крупным вспомогательным файлом может зафиксироваться, но не восстановиться после сбоя при той же конфигурации.
Проблема обнаружена при аудите файлов вычислений v0.2, но относится к общей надёжности хранения.
2. Требования
Выбрать и зафиксировать один контракт:
Декодер проверяет манифест по неизменяемым абсолютным пределам без чтения данных, затем readStagedJournal применяет действующую Config; либо
Декодер принимает явно переданные неизменяемые действующие ограничения.
Нельзя:
ослаблять проверки переполнения, порядковых номеров и подмены;
читать данные до проверки манифеста, происхождения и ограничений;
без необходимости менять формат передачи журнала v5;
выделять сотни MiB только ради тестового примера.
3. Файлы
store/fs/fs.go;
store/fs/staged_payload_limits_test.go;
отдельный интеграционный тест восстановления.
4. Тесты
Все тесты используют AAA.
Манифест выше стандартных ограничений, но ниже абсолютного предела проходит этап декодирования.
Уменьшенная конфигурация при повторном открытии отклоняет восстановление до чтения данных.
Та же увеличенная конфигурация успешно восстанавливает транзакцию.
Переполнение суммарного объёма и размера отклоняется.
Требования к порядковым номерам, обнаружению подмены и отсутствующих данных не нарушаются.
Ограниченный по размеру модульный пример используется вместо реального выделения 256+ MiB.
5. Критерии приёмки
Запись и восстановление принимают одну и ту же корректную транзакцию с заданной конфигурацией.
Уменьшенные ограничения безопасно блокируют восстановление до чтения данных.