Процесс восстановления
Процесс восстановления начинается при первом вызове box.cfg{} после
запуска экземпляра сервера Tarantool.
Процесс восстановления должен восстановить базы данных на момент последнего завершения работы экземпляра. Для этого может использоваться последний файл снимка и все WAL-файлы, записанные после снимка. Один из усложняющих факторов заключается в том, что в Tarantool есть два движка – данные memtx должны быть полностью восстановлены из файла снимка и WAL-файлов, тогда как данные vinyl хранятся на диске, но могут потребовать обновления примерно во время контрольной точки. (При создании снимка Tarantool передает движку vinyl команду создать контрольную точку, и операция создания снимка откатывается, если что-то идет не так, поэтому контрольная точка vinyl не менее актуальна, чем файл снимка.)
Шаг 1
Чтение параметров конфигурации в запросе box.cfg{}. Параметры,
влияющие на восстановление, могут включать
work_dir, wal_dir,
memtx_dir, vinyl_dir и
force_recovery.
Шаг 2
Поиск последнего файла снимка. Его данные используются для восстановления баз данных в оперативной памяти. Движку vinyl передается команда на восстановление до последней контрольной точки.
Существуют две разновидности процедуры восстановления для баз данных memtx в зависимости от того, является ли процесс восстановления «стандартным».
Если процесс восстановления стандартный (параметр force_recovery имеет
значение false), memtx может читать данные из снимка со всеми
отключенными индексами. Сначала все кортежи считываются в память. Затем
первичные ключи строятся пакетно с использованием того факта, что данные
уже отсортированы по первичному ключу в пределах каждого спейса.
Если процесс восстановления нестандартный (параметр force_recovery
имеет значение true), Tarantool выполняет дополнительную проверку.
Индексы включены с самого начала, и кортежи добавляются по одному. Это
означает, что любые нарушения ограничений уникальности будут обнаружены,
а дубликаты будут пропущены. Обычно нарушений ограничений или дубликатов
не возникает, поэтому эти проверки выполняются только в случае ошибки.
Шаг 3
Поиск WAL-файла, созданного во время или после файла снимка. Чтение его записей журнала продолжается до тех пор, пока LSN записи журнала не превысит LSN снимка или LSN контрольной точки vinyl. Это «начальная позиция» процесса восстановления; она соответствует текущему состоянию движков.
Шаг 4
Повторное выполнение записей журнала от начальной позиции до конца WAL. Движок пропускает инструкцию повтора, если она старше контрольной точки движка.
Шаг 5
Для движка memtx выполняется повторное создание всех вторичных индексов.