Модуль compat
Обычный способ решения проблем совместимости — добавить параметр для нового поведения, а старое оставить по умолчанию. Однако такой подход не всегда оптимален.
Иногда разработчики хотят сохранить старое поведение для существующих приложений и предложить новое поведение по умолчанию для новых. Например, если старое поведение заведомо проблематично, менее безопасно или не соответствует ожиданиям пользователей. При этом пользователи не всегда читают документацию целиком и часто рассчитывают на разумные значения по умолчанию. Было решено добавить модуль совместимости, предоставляющий прямой способ отказа от нежелательного поведения.
Модуль compat представляет собой глобальную таблицу параметров с
расширенным интерфейсом и вспомогательными функциями. Изменение
поведения проходит в три этапа:
- Старое поведение по умолчанию.
- Новое поведение по умолчанию.
- Новое поведение зафиксировано, старое удалено.
На первых двух этапах
пользователь может переключать параметры через интерфейс и изменять
поведение в соответствии со своими потребностями. На последнем этапе
старое поведение удаляется из кода, а параметр помечается как
устаревший. Поскольку compat является глобальным экземпляром,
параметры могут быть жёстко заданы в нём или добавлены во время
выполнения, например, внешним модулем.
Переход параметров на следующий этап осуществляется в мажорных релизах. Это позволяет разработчикам адаптироваться к новому стандартному поведению и протестировать его до перехода на следующий релиз. Если новая версия Tarantool что-то нарушает, разработчик может исправить это простой сменой конфигурации — то есть явно выбрать старое поведение.
Рассмотрим пример ниже:
- Параметр
json_esc_slashпоявился в минорном релизе 2.11. По умолчанию используется значение 'old', но разработчик может включить новое поведение или протестировать обновлённое поведение, переключив параметр вручную на 'new'. - В релизе 3.0, следующем мажорном релизе, значение по умолчанию для
json_esc_slashпереключено на 'new'. Теперь разработчики, не успевшие адаптироваться к новому поведению, могут переключить параметр на 'old' и исправить свой модуль в будущем. - В релизе 4.0 параметр
json_esc_slashпомечен как устаревший, и старое поведение больше недоступно. Разработчикам необходимо использовать новое поведение.
Чтобы явно зафиксировать каждое поведение в compat, это можно сделать
вручную, а затем вызвать compat.dump() для получения Lua-команды,
которая настраивает compat со всеми выбранными параметрами. Эти
команды следует поместить в начало кода в файле init.lua. Таким
образом гарантируется одинаковое поведение на любой другой версии
Tarantool. Дополнительные примеры см. в
руководстве по использованию compat.
Другой способ решения проблем совместимости — настройка
параметров конфигурации compat.*.
Как и параметры Lua-модуля compat, параметры конфигурации могут
принимать значения new и old. Набор параметров конфигурации
соответствует набору параметров, доступных в модуле compat.
Ниже приведён пример фрагмента YAML-файла конфигурации:
compat:box_space_max: 'new'sql_seq_scan_default: 'old'fiber_slice_default: 'old'binary_data_decoding: 'new'
Подробнее см. в справочнике по конфигурации.
Ниже перечислены доступные параметры compat: