Значение по умолчанию для replication_sync_timeout
Параметр: box_cfg_replication_sync_timeout
Ненулевое значение
replication_sync_timeout
создаёт у пользователя ложное предположение о том, что вызов
box.cfg{replication = ...} возвращается только после синхронизации
настроенного экземпляра со всеми остальными экземплярами. В большинстве
случаев это справедливо для больших значений replication_sync_timeout,
однако не гарантируется на 100%. Иными словами, пользователю всё равно
необходимо проверять, выполнилась ли синхронизация узла, либо истекло
время ожидания. Кроме того, пока идёт отсчёт replication_sync_timeout,
повторно настроить box через ещё один вызов box.cfg нельзя, что
усложняет переконфигурацию.
Было принято решение установить replication_sync_timeout в ноль по
умолчанию.
Модуль compat позволяет выбрать между
- старым поведением:
box.cfg.replication_sync_timeoutпо умолчанию равен 300 секундам
- и новым поведением:
box.cfg.replication_sync_timeoutпо умолчанию равен 0. Желаемое поведение необходимо задать до первого вызоваbox.cfg{}, чтобы оно вступило в силу.
tarantool> compat.box_cfg_replication_sync_timeout = 'new'---...tarantool> box.cfg{}---...tarantool> box.cfg.replication_sync_timeout---- 0...tarantool> compat.box_cfg_replication_sync_timeout = 'old'---- error: 'builtin/box/load_cfg.lua:253: The compat option ''box_cfg_replication_sync_timeout''takes effect only before the initial box.cfg() call'...
Новый запуск Tarantool:
tarantool> compat.box_cfg_replication_sync_timeout = 'old'---...tarantool> box.cfg{}---...tarantool> box.cfg.replication_sync_timeout---- 300...
На данный момент несовместимых модулей не обнаружено.
Ожидается, что проблемы могут возникнуть в коде, где предполагается, что
после возврата вызова box.cfg{replication=...} узел не находится в
состоянии orphan (box.info.status ~= "orphan"). При новом поведении
это не так. Чтобы сэмулировать старое поведение, можно добавить вызов
box.ctl.wait_rw() после box.cfg{}. box.ctl.wait_rw() возвращается
только тогда, когда узел становится доступным для записи и,
следовательно, перестаёт быть orphan.