Tarantool CE/EE Documentation portal logo
Помощь

Модуль compat

Обычный способ решения проблем совместимости — добавить параметр для нового поведения, а старое оставить по умолчанию. Однако такой подход не всегда оптимален.

Иногда разработчики хотят сохранить старое поведение для существующих приложений и предложить новое поведение по умолчанию для новых. Например, если старое поведение заведомо проблематично, менее безопасно или не соответствует ожиданиям пользователей. При этом пользователи не всегда читают документацию целиком и часто рассчитывают на разумные значения по умолчанию. Было решено добавить модуль совместимости, предоставляющий прямой способ отказа от нежелательного поведения.

Модуль compat представляет собой глобальную таблицу параметров с расширенным интерфейсом и вспомогательными функциями. Изменение поведения проходит в три этапа:

  1. Старое поведение по умолчанию.
  2. Новое поведение по умолчанию.
  3. Новое поведение зафиксировано, старое удалено.

На первых двух этапах пользователь может переключать параметры через интерфейс и изменять поведение в соответствии со своими потребностями. На последнем этапе старое поведение удаляется из кода, а параметр помечается как устаревший. Поскольку 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: