Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Значение по умолчанию для 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.