- роадмап отвечает «что умеет и чего не умеет»: PLAN.md → ROADMAP.md, четыре канонические секции, достигнутые звенья строками в «Готово», цели переформулированы возможностями приложения - задачи: род работы и «Затрагивает» набору спринта, 34 заголовка в форму действия, «Завершение» целей перечнями со ссылкой из каждой задачи - вычитка проходами task-form и doc-wording, починены протухшие факты в README, паспорте и review.md
32 lines
2.6 KiB
Markdown
32 lines
2.6 KiB
Markdown
# Проверять целостность собранной витрины до подмены
|
|
|
|
- **Секция:** Ядро
|
|
- **Зачем:** Подмена файла необратима, а годность выхода подтверждена отпечатком на ещё открытом дескрипторе
|
|
- **Теги:** goal:journal-and-rebuild
|
|
|
|
`healthlog reindex` собирает витрину в отдельный файл и снимает с него
|
|
отпечаток, а подмену делает человек: остановить сервис, переименовать файл,
|
|
поднять обратно. Это **единственный необратимый шаг** всей операции — и
|
|
единственный, перед которым мы ничего не проверяем.
|
|
|
|
Отпечаток сегодня снимается на **ещё открытом дескрипторе**: он говорит, что
|
|
свёртка сошлась, но не говорит, что файл на диске корректен как база SQLite.
|
|
Между «свёртка сошлась» и «файл цел» помещается всё, о чём предупреждает
|
|
[How To Corrupt An SQLite Database](https://www.sqlite.org/howtocorrupt.html):
|
|
оборванный `fsync`, полный диск, ФС, соврала о записи. Человек в этот момент
|
|
уже удалил рабочую витрину.
|
|
|
|
Что делать: после закрытия файла и **до** того, как команда объявит результат
|
|
годным к подмене, открыть его заново и прогнать `PRAGMA integrity_check`.
|
|
Не прошёл — команда завершается отказом и прямо говорит, что подменять нечем.
|
|
|
|
Дёшево: одна страница кода, один прогон по готовому файлу. Ценно ровно в тот
|
|
момент, когда всё остальное уже пошло не так.
|
|
|
|
Готово, когда `reindex` на заведомо испорченном выходном файле отказывается
|
|
называть результат годным, а на здоровом — не замедляется заметно.
|
|
|
|
Связано: `cmd/healthlog/reindex.go`, `docs/architecture.md` → «Пересборка».
|
|
|
|
Двигает строку «Завершения» цели: «Годность собранной витрины подтверждена до подмены файла».
|