Исправление значений decimal в vinyl-спейсах при обновлении до 2.10.1
Это руководство по обновлению описывает исправление конкретной проблемы, которая могла возникнуть со
значениями decimal в vinyl-спейсах. Оно применимо только при обновлении с Tarantool версии <= 2.10.0 до версии >= 2.10.1.
До исправления 6377 значения decimal и double в индексе типа scalar или number могли оказаться в неправильном
порядке после обновления. Если такой индекс был построен для спейса, использующего движок vinyl, индекс сохраняется
на диске и не перестраивается даже после обновления. В этом случае необходимо перестроить затронутые индексы вручную.
Ниже приведены критерии для определения, затронута ли ваша установка. Если все перечисленные ниже утверждения верны, необходимо
вручную перестроить индексы для затронутых vinyl-спейсов.
- Использовалась Tarantool версии 2.10.0 и ниже.
- Имеются спейсы с движком хранения
vinyl. - В
vinyl-спейсах есть индексы типаnumberилиscalar. - Кортежи в этих спейсах могут содержать как значения
decimal, так и значенияdoubleтипаInfилиNaN. Если это относится к вашей установке, можно выполнить следующий скрипт, который найдет все затронутые индексы:
../_includes/script_find_indices.rst
Индексы, требующие перестроения, будут сохранены в таблице require_rebuild. Если таблица пуста, ваша установка не затронута, и
можно продолжать использовать Tarantool как прежде.
Если таблица require_rebuild содержит записи, можно перестроить затронутые индексы с помощью следующего скрипта.
../_includes/script_rebuild_indices.rst
Скрипт может завершиться ошибкой для некоторых индексов со следующим сообщением: "Cannot rebuild primary index index_name on space space_name. Please, recreate the space manually". В этом случае автоматическое перестроение индекса невозможно, и для обеспечения целостности данных необходимо пересоздать спейс вручную:
- Создайте новый спейс с тем же форматом, что и у существующего.
- Определите те же индексы в созданном спейсе.
- Выполните итерацию по первичному ключу старого спейса и вставьте все данные в новый спейс.
- Удалите старый спейс.