Версия:

Вложенный модуль box.ctl

Вложенный модуль box.ctl

The box.ctl submodule contains two wait functions and two functions related to triggers.

The wait functions wait_ro (wait until read-only) and wait_rw (wait until read-write) are useful during initialization of a server.

Для box_once() есть особое предназначение. Например, при инициализации реплика может вызвать функцию box.once(), пока сервер все еще находится в режиме только для чтения, и не сможет применить изменения однократно до окончательной инициализации реплики. Это может привести к конфликту между мастером и репликой, если мастер находится в режиме чтения и записи, а реплика доступна только для чтения. Ожидание условия «read only mode = false» (режим только для чтения отключен) решает эту проблему.

Чтобы проверить режим функции – только для чтения или чтение и запись, используйте box.info.ro.

box.ctl.wait_ro([timeout])

Дождаться, пока не будет выполнено box.info.ro.

Параметры:
  • timeout (number) – максимальное количество секунд ожидания
возвращается:

нулевое значение nil или ошибка (ошибки могут возникать из-за превышения времени ожидания или прерывания работы файбера)

Пример:

tarantool> box.info().ro
 ---
 - false
 ...

 tarantool> n = box.ctl.wait_ro(0.1)
 ---
 - error: timed out
 ...
box.ctl.wait_rw([timeout])

Дождаться, пока не перестанет соблюдаться box.info.ro.

Параметры:
  • timeout (number) – максимальное количество секунд ожидания
возвращается:

нулевое значение nil или ошибка (ошибки могут возникать из-за превышения времени ожидания или прерывания работы файбера)

Пример:

tarantool> box.ctl.wait_rw(0.1)
            ---
            ...

The box.ctl submodule also contains two functions for the two server trigger definitions: on_schema_init and on_shutdown.

box.ctl.on_schema_init(trigger-function[, old-trigger-function])

Create a «schema_init trigger». The trigger-function will be executed when box.cfg{} happens for the first time. That is, the schema_init trigger is called before the server’s configuration and recovery begins, and therefore box.ctl.on_schema_init must be called before box.cfg is called.

Parameter: trigger-function (function) – функция, которая будет вызываться по триггеру

Parameter: old-trigger-function (function) – existing trigger function which will be replaced by trigger-function

Return: nil or function pointer

Если указаны параметры (nil, old-trigger-function), старый триггер будет удален.

A common use is: make a schema_init trigger function which creates a before_replace trigger function on a system space. Thus, since system spaces are created when the server starts, the before_replace triggers will be activated for each tuple in each system space. For example, such a trigger could change the storage engine of a given space, or make a given space replica-local while a replica is being bootstrapped. Making such a change after box.cfg is not reliable because other connections might use the database before the change can be made.

Подробная информация о характеристиках триггера находится в разделе Триггеры.

Пример:

Suppose that, before the server is fully up and ready for connections, you want to make sure that the engine of space space_name is vinyl. So you want to make a trigger that will be activated when a tuple is inserted in the _space system space. In this case you could end up with a master that has space-name with engine='memtx' and a replica that has space_name with engine='vinyl', with the same contents.

function function_for_before_replace(old, new)
  if new[3] == 'space_name' and new[4] ~= 'vinyl' then
    return new:update{{'=', 4, 'vinyl'}}
  end
end

box.ctl.on_schema_init(function()
  box.space._space:before_replace(function_for_before_replace)
end)

box.cfg{replication='master_uri', ...}
box.ctl.on_shutdown(trigger-function[, old-trigger-function])

Create a «shutdown trigger». The trigger-function will be executed whenever os.exit() happens, or when the server is shut down after receiving a SIGTERM or SIGINT or SIGHUP signal (but not after SIGSEGV or SIGABORT or any signal that causes immediate program termination). The trigger function is actually called just before shutdown, so the trigger function can still refer to any methods and members in other Tarantool modules.

Like box.ctl.on_schema_init(), box.ctl.on_shutdown() may be done before box.cfg{} is invoked.

Параметры:
  • trigger-function (function) – функция, в которой будет триггер
  • old-trigger-function (function) – существующая функция с триггером, которую заменит новая
возвращается:

nil или указатель функции

Если указаны параметры (nil, old-trigger-function), старый триггер будет удален.

Подробная информация о характеристиках триггера находится в разделе Триггеры.