Версия:

Функция box.once

Функция box.once

box.once(key, function[, ...])

Выполнение функции при условии, что она раньше не выполнялась. Передаваемое значение проверяется на предмет того, выполнялась ли функция. Если она выполнялась, ничего не происходит. В противном случае вызывается функция.

См. пример использования box.once() во время настройки набора реплик.

Если в box.once() возникает ошибка во время инициализации базы данных, можно повторно запустить невыполненный блок box.once(), не останавливая базу данных. Для этого удалите объект once из системного спейса _schema. Введите команду box.space._schema:select{}, найдите объект once и удалите его. Например, повторное выполнение блока key='hello' :

Когда box.once() используется для инициализации, следует подождать, пока база данных не будет в нужном состоянии (только для чтения или для чтения и записи). Для этого см. функции во вложенном модуле box.ctl.

tarantool> box.space._schema:select{}
    ---
    - - ['cluster', 'b4e15788-d962-4442-892e-d6c1dd5d13f2']
      - ['max_id', 512]
      - ['oncebye']
      - ['oncehello']
      - ['version', 1, 7, 2]
    ...

    tarantool> box.space._schema:delete('oncehello')
    ---
    - ['oncehello']
    ...

    tarantool> box.once('hello', function() end)
    ---
    ...
Параметры:
  • key (string) – значение для проверки
  • function (function) – функция
  • ... – аргументы, которые следует передать в функцию