Исправление недопустимых имён типов при обновлении до 2.10.4
Это руководство по обновлению описывает исправление одной конкретной проблемы, которая может возникнуть с именами типов полей. Оно применимо только при обновлении с версии Tarantool <=2.10.3 до версии >=2.10.4.
До исправления 5940 Tarantool принимал пустые строки, n, nu, s и st (то есть начальные части num и str) как
допустимые типы полей. Начиная с версии 2.10.4 эти строки не принимаются, их необходимо заменить на корректные
значения num и str.
Эта инструкция также доступна на GitHub.
Проверить снимок состояния на наличие этой проблемы можно с помощью следующего скрипта:
../_includes/script_check_type_names.rst
Если снимок содержит значения, недопустимые в версии 2.10.4, скрипт выдаст результат типа:
$ ./verify.lua 00000000000002045336.snapA field def in a _space entry "hehe" contains an illegal type: {"name":"id","type":"st"}The following _space entry contains illegal type(s): {"HEADER":{"lsn":342,"type":"INSERT","timestamp":1662160874.6816},"BODY":{"space_id":280,"tuple":[589,1,"hehe","memtx",0,{},[{"name":"id","type":"st"}]]}}00000000000002045336.snap has an illegal type in a space formatIt is recommended to proceed with the upgrade instruction:https://github.com/tarantool/tarantool/wiki/Fix-illegal-field-type-in-a-space-format-when-upgrading-to-2.10.4
Чтобы исправить файл приложения, содержащий недопустимые имена типов, добавьте в него следующий код до вызова
box.cfg()/vshard.cfg()/cartridge.cfg().
../_includes/script_fix_type_names.rst
Удалить эти триггеры можно после вызова box.cfg()/vshard.cfg()/cartridge.cfg().
Пример для приложения Cartridge:
-- <..define before_replace function..>-- <..define on_schema_init function..>-- Set the trigger on _space.box.ctl.on_schema_init(on_schema_init)-- Init cartridge. The snapshot is recovered while configuration.cartridge.cfg(<...>)-- Delete the triggers.box.space._space:before_replace(nil, before_replace)box.ctl.on_schema_init(nil, on_schema_init)
Триггеры сообщат о внесенных изменениях в следующем виде:
I> Transform a field def in a _space entry "hehe": {"name":"id","type":"st"} -> {"name":"id","type":"str"}I> Transformed _space entry [589,1,"hehe","memtx",0,{},[{"name":"id","type":"st"}]] to [589,1,"hehe","memtx",0,{},[{"name":"id","type":"str"}]]