Function box.once¶
-
box.
once
(key, function[, ...])¶ Execute a function, provided it has not been executed before. A passed value is checked to see whether the function has already been executed. If it has been executed before, nothing happens. If it has not been executed before, the function is invoked.
See an example of using
box.once()
while bootstrapping a replica set.If an error occurs inside
box.once()
when initializing a database, you can re-execute the failedbox.once()
block without stopping the database. The solution is to delete theonce
object from the system space _schema. Saybox.space._schema:select{}
, find youronce
object there and delete it. For example, re-executing a block withkey='hello'
:When
box.once()
is used for initialization, it may be useful to wait until the database is in an appropriate state (read-only or read-write). In that case, see the functions in the box.ctl submodule.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) --- ...
Parameters: - key (string) – a value that will be checked
- function (function) – a function
- ... – arguments that must be passed to function