From 64d90c35c26e742e3657a1b31420966de32878e9 Mon Sep 17 00:00:00 2001 From: Konstantin Osipov <kostja@tarantool.org> Date: Mon, 16 Sep 2013 22:02:58 +0400 Subject: [PATCH] Document lua-console and begin adding docs for dynamic add/drop space. --- doc/user/configuration-reference.xml | 25 ++- doc/user/language-reference.xml | 75 ++++---- doc/user/persistence-architecture.xml | 2 +- doc/user/replication.xml | 4 +- doc/user/stored-procedures.xml | 240 +++++++++++++------------- doc/user/target.db | 6 +- 6 files changed, 168 insertions(+), 184 deletions(-) diff --git a/doc/user/configuration-reference.xml b/doc/user/configuration-reference.xml index 06a3533e50..0e341bb563 100644 --- a/doc/user/configuration-reference.xml +++ b/doc/user/configuration-reference.xml @@ -102,7 +102,7 @@ Tarantool 1.4.0-69-g45551dd <para><option>--check-config</option></para> <para>Check the configuration file for errors. This option is normally used on the command line - before <quote>reload configuration</quote> + before <quote>box.cfg.reload()</quote> is issued on the administrative port, to ensure that the new configuration is valid. When configuration is indeed correct, the program produces no output and returns <literal>0</literal>. @@ -130,16 +130,11 @@ Tarantool 1.4.0-69-g45551dd </option></para> <para>Initialize the directory, specified in <emphasis>vardir</emphasis> configuration option by creating an empty snapshot file in - it. If <filename>vardir</filename> doesn't contain at - least one snapshot, the server does not start. There is no - <quote>magic</quote> with automatic initialization of - <filename>vardir</filename> on boot to make - potential system errors more noticeable. For example, if the - operating system reboots and fails to mount the partition on - which <filename>vardir</filename> is expected to reside, the - <filename>rc.d</filename> or <command>service</command> script - responsible for server restart will also fail, thanks to this - option. + it. Prior to Tarantool 1.6, if <filename>vardir</filename> + didn't contain at least one snapshot, the server did not + start. Starting from 1.6, the initial storage file is + created automatically when starting in a clean data + directory. </para> </listitem> </itemizedlist> @@ -185,7 +180,7 @@ Tarantool 1.4.0-69-g45551dd <para> To facilitate centralized and automated configuration management, runtime configuration modifications are supported - solely through <olink targetptr="reload-configuration"/> + solely through <olink targetptr="box.cfg.reload"/> administrative statement. Thus, the procedure to change Tarantool configuration at runtime is to edit the configuration file. This ensures that, should the @@ -197,7 +192,7 @@ Tarantool 1.4.0-69-g45551dd such settings will be highlighted in this reference. If the same setting is given more than once, the latest occurrence takes effect. - You can always invoke <olink targetptr="show-configuration"/> + You can always invoke <olink targetptr="box.cfg.show"/> from the administrative console to show the current configuration. </para> @@ -532,7 +527,7 @@ tarantool_box: primary@sessions pri:33013 sec:33014 adm:33015</programlisting> <entry>no</entry> <entry>yes</entry> <entry>Reduce the throttling effect of <olink - targetptr="save-snapshot"/> on the INSERT/UPDATE/DELETE + targetptr="box.snapshot"/> on the INSERT/UPDATE/DELETE performance by setting a limit on how many megabytes per second it can write to disk. The same can be achieved by splitting <olink @@ -622,7 +617,7 @@ tarantool_box: primary@sessions pri:33013 sec:33014 adm:33015</programlisting> on <olink targetptr="primary_port"/>. This parameter is dynamic, that is, to enter master mode, simply set the value to an empty string and issue <olink - targetptr="reload-configuration"/>.</entry> + targetptr="box.cfg.reload"/>.</entry> </row> </tbody> diff --git a/doc/user/language-reference.xml b/doc/user/language-reference.xml index 02782b180f..cb19537570 100644 --- a/doc/user/language-reference.xml +++ b/doc/user/language-reference.xml @@ -54,7 +54,7 @@ client automatically selects the correct port for you with help of a simple regular expression. SELECTs, UPDATEs, INSERTs, DELETEs and CALLs are sent to the primary port. - SHOW, RELOAD, SAVE and other statements are sent to the administrative port. + Lua commands are sent to the administrative port. </para> <section xml:id="data-manipulation"> @@ -123,15 +123,13 @@ <section xml:id="administrative-console"> <title>Administrative console</title> <para> - The administrative console uses a simple text protocol. - All commands are case-insensitive. - You can connect to the administrative port using any - <command>telnet</command> client, or a tool like + The administrative console is simply an outlet of the Tarantool + Lua interpreter. You can connect to the administrative port + using any <command>telnet</command> client, or a tool like <command>rlwrap</command>, if access to readline features is desired. Additionally, <command>tarantool</command>, the - SQL-capable command line client, - understands all administrative statements - and automatically directs them to the administrative port. + SQL-capable command line client, automatically distinguishes + SQL and Lua statements and directs them to the appropriate port. The server response to an administrative command, even though it is always in plain text, can be quite complex. It is encoded using YAML markup to simplify automated parsing. @@ -144,8 +142,8 @@ <variablelist> <varlistentry> - <term xml:id="save-snapshot" xreflabel="SAVE SNAPSHOT"> - <emphasis role="tntadmin">save snapshot</emphasis> + <term xml:id="box.snapshot" xreflabel="box.snapshot()"> + <emphasis role="tntadmin">box.snapshot()</emphasis> </term> <listitem><para> Take a snapshot of all data and store it in @@ -168,17 +166,17 @@ is, on average, sufficient. This statement waits until a snapshot is taken and returns operation result. For example: -<programlisting>localhost> show info +<programlisting>localhost> box.info() --- info: version: "1.4.6" lsn: 843301 ... -localhost> save snapshot +localhost> box.snapshot() --- ok ... -localhost> save snapshot +localhost> box.snapshot() --- fail: can't save snapshot, errno 17 (File exists) ... @@ -189,7 +187,7 @@ fail: can't save snapshot, errno 17 (File exists) write ahead log. Once a snapshot is taken, old WALs can be deleted as long as all replicas are up to date. But the WAL which was current at the time <emphasis - role="tntadmin">save snapshot</emphasis> started must be + role="tntadmin">box.snapshot()</emphasis> started must be kept for recovery, since it still contains log records written after the start of <emphasis role="tntadmin">save snapshot</emphasis>. @@ -206,8 +204,8 @@ fail: can't save snapshot, errno 17 (File exists) <varlistentry> - <term xml:id="reload-configuration" xreflabel="RELOAD CONFIGURATION"> - <emphasis role="tntadmin">reload configuration</emphasis> + <term xml:id="box.cfg.reload" xreflabel="box.cfg.reload()"> + <emphasis role="tntadmin">box.cfg.reload()</emphasis> </term> <listitem><para> Re-read the configuration file. If the file contains @@ -219,8 +217,8 @@ fail: can't save snapshot, errno 17 (File exists) </varlistentry> <varlistentry> - <term xml:id="show-configuration" xreflabel="SHOW CONFIGURATION"> - <emphasis role="tntadmin">show configuration</emphasis> + <term xml:id="box.cfg.show" xreflabel="box.cfg()"> + <emphasis role="tntadmin">box.cfg()</emphasis> </term> <listitem><para> Show the current settings. Displays all settings, @@ -230,12 +228,12 @@ fail: can't save snapshot, errno 17 (File exists) </varlistentry> <varlistentry> - <term xml:id="show-info" xreflabel="SHOW INFO"> - <emphasis role="tntadmin">show info</emphasis> + <term xml:id="box.info" xreflabel="box.info()"> + <emphasis role="tntadmin">box.info()</emphasis> </term> <listitem><para> <programlisting> -localhost> show info +localhost> box.info() --- info: version: "1.4.5-128-ga91962c" @@ -272,15 +270,15 @@ info: </varlistentry> <varlistentry> - <term xml:id="show-stat" xreflabel="SHOW STAT"> - <emphasis role="tntadmin">show stat</emphasis> + <term xml:id="box.stat.show" xreflabel="box.stat()"> + <emphasis role="tntadmin">box.stat()</emphasis> </term> <listitem><para> Show the average number of requests per second, and the total number of requests since startup, broken down by request type: INSERT or SELECT or UPDATE or DELETE." <programlisting> -localhost> show stat +localhost> box.stat() --- statistics: INSERT: { rps: 139 , total: 48207694 } @@ -293,8 +291,8 @@ statistics: </varlistentry> <varlistentry> - <term xml:id="show-slab" xreflabel="SHOW SLAB"> - <emphasis role="tntadmin">show slab</emphasis> + <term xml:id="box.slab.info" xreflabel="box.slab.info()"> + <emphasis role="tntadmin">box.slab.info()</emphasis> </term> <listitem> <para> @@ -319,19 +317,8 @@ statistics: </varlistentry> <varlistentry> - <term xml:id="show-palloc" xreflabel="SHOW PALLOC"> - <emphasis role="tntadmin">show palloc</emphasis> - </term> - <listitem><para> - A pool allocator is used for temporary memory, when - serving client requests. Every fiber has its own - temporary pool. Shows the current state of pools of all fibers. - </para></listitem> - </varlistentry> - - <varlistentry> - <term xml:id="save-coredump" xreflabel="SAVE COREDUMP"> - <emphasis role="tntadmin">save coredump</emphasis> + <term xml:id="box.coredump" xreflabel="box.coredump()"> + <emphasis role="tntadmin">box.coredump()</emphasis> </term> <listitem><para> Fork and dump a core. Since Tarantool stores all tuples @@ -341,8 +328,8 @@ statistics: </varlistentry> <varlistentry> - <term xml:id="show-fiber" xreflabel="SHOW FIBER"> - <emphasis role="tntadmin">show fiber</emphasis> + <term xml:id="box.fiber.info" xreflabel="box.fiber.info()"> + <emphasis role="tntadmin">box.fiber.info()</emphasis> </term> <listitem><para> Show all running fibers, with their stack. @@ -351,11 +338,11 @@ statistics: </varlistentry> <varlistentry> - <term xml:id="lua-command" xreflabel="LUA ..."> - <emphasis role="tntadmin">lua ...</emphasis> + <term xml:id="lua-command"> + <emphasis role="tntadmin">...</emphasis> </term> <listitem><para> - Execute a chunk of Lua code. This can be used to define, + Execute any chunk of Lua code. This can be used to define, invoke, debug and drop <olink targetptr="stored-procedures">stored procedures</olink>, inspect server environment, perform automated diff --git a/doc/user/persistence-architecture.xml b/doc/user/persistence-architecture.xml index 2c9cc0272d..c98e280fb3 100644 --- a/doc/user/persistence-architecture.xml +++ b/doc/user/persistence-architecture.xml @@ -91,7 +91,7 @@ possible to turn the write ahead log completely off, by setting <olink targetptr="wal_mode"/> to <emphasis>none</emphasis>. Even without the write ahead log it's still possible to take a persistent copy of the entire data set with -<olink targetptr="save-snapshot"/>. +<olink targetptr="box.snapshot"/>. </para> diff --git a/doc/user/replication.xml b/doc/user/replication.xml index 66ee093f08..7cb912f98d 100644 --- a/doc/user/replication.xml +++ b/doc/user/replication.xml @@ -101,7 +101,7 @@ <note><simpara> Replication parameters are "dynamic", which allows the replica to become a master and vice versa with help of - <olink targetptr="reload-configuration"/> statement. + <olink targetptr="box.cfg.reload"/> statement. </simpara></note> </section> @@ -152,7 +152,7 @@ <listitem> <para> Record the replica's LSN, by issuing <olink - targetptr="show-info"/>. This LSN may prove useful if + targetptr="box.info"/>. This LSN may prove useful if there are updates on the master that never reached the replica. </para> diff --git a/doc/user/stored-procedures.xml b/doc/user/stored-procedures.xml index a756ca3f60..d13e140dcb 100644 --- a/doc/user/stored-procedures.xml +++ b/doc/user/stored-procedures.xml @@ -34,7 +34,7 @@ <para> Procedures can be invoked from the administrative console and using the binary protocol, for example: -<programlisting><computeroutput>localhost> lua function f1() return 'hello' end +<programlisting><computeroutput>localhost> function f1() return 'hello' end --- ... localhost> call f1() @@ -57,15 +57,15 @@ Found 1 tuple: administrative console, the newly created <code language="Pascal">function f1()</code> can be called there too: -<programlisting><computeroutput>localhost> lua f1() +<programlisting><computeroutput>localhost> f1() --- - hello ... -localhost> lua 1+2 +localhost> 1+2 --- - 3 ... -localhost> lua "hello".." world" +localhost> "hello".." world" --- - hello world ... @@ -127,11 +127,11 @@ expirationd.run_task("exprd space 0", 0, is_expired, purge, within the system. </para> <para> - There is a single global instance of the Lua interpreter, which is - shared across all connections. Anything prefixed with - <code>lua </code> on the administrative console is sent - directly to this interpreter. Any change of the interpreter - state is immediately available to all client connections. + There is a single global instance of the Lua interpreter, + which is shared across all connections. Any command typed + entered on the on the administrative console is sent directly + to this interpreter. Any change of the interpreter state is + immediately available to all client connections. </para> <para> Each connection, however, is using its own Lua @@ -169,10 +169,10 @@ function f1(a) return type(a), s end kostja@atlas:~$ tarantool -localhost> lua dofile('arg.lua') +localhost> dofile('arg.lua') --- ... -localhost> lua f1('1234') +localhost> f1('1234') --- - string - 0x31 0x32 0x33 0x34 @@ -181,7 +181,7 @@ localhost> call f1('1234') Call OK, 2 rows affected ['string'] ['0x31 0x32 0x33 0x34 '] -localhost> lua f1(1234) +localhost> f1(1234) --- - number - 1234 @@ -199,7 +199,7 @@ Call OK, 2 rows affected <para>In addition to conventional method invocation, Lua provides object-oriented syntax. Access to the latter is available on the administrative console only: -<programlisting><computeroutput>localhost> lua box.space[0]:truncate() +<programlisting><computeroutput>localhost> box.space[0]:truncate() --- ... localhost> call box.space[0]:truncate() @@ -225,14 +225,14 @@ error: 1:15 expected '(' Similarly, an error which has occurred inside Tarantool (observed on the client as an error code), when happens during execution of a Lua procedure, produces a genuine Lua error: -<programlisting><computeroutput>localhost> lua function f1() error("oops") end +<programlisting><computeroutput>localhost> function f1() error("oops") end --- ... localhost> call f1() Call ERROR, Lua error: [string "function f1() error("oops") end"]:1: oops (ER_PROC_LUA) localhost> call box.insert('99', 1, 'test') Call ERROR, Space 99 is disabled (ER_SPACE_DISABLED) -localhost> lua pcall(box.insert, 99, 1, 'test') +localhost> pcall(box.insert, 99, 1, 'test') --- - false - Space 99 is disabled @@ -245,7 +245,7 @@ localhost> lua pcall(box.insert, 99, 1, 'test') <code>box</code> Lua library. The contents of the library can be inspected at runtime: -<programlisting><computeroutput>localhost> lua for k, v in pairs(box) do print(k, ": ", type(v)) end +<programlisting><computeroutput>localhost> for k, v in pairs(box) do print(k, ": ", type(v)) end --- fiber: table space: table @@ -291,15 +291,15 @@ pack: function arithmetics as in the built-in number type. <bridgehead renderas="sect4">Example</bridgehead> <programlisting> -localhost> lua tonumber64('123456789'), tonumber64(123456789) +localhost> tonumber64('123456789'), tonumber64(123456789) --- - 123456789 - 123456789 ... -localhost> lua i=tonumber64(1) +localhost> i=tonumber64(1) --- ... -localhost> lua type(i), type(i*2), type(i/2), i, i*2, i/2 +localhost> type(i), type(i*2), type(i/2), i, i*2, i/2 --- - cdata - cdata @@ -407,11 +407,11 @@ Call OK, 1 rows affected localhost> call box.select(0, 0, 'test') Call OK, 1 rows affected ['test', 'my first tuple'] -localhost> lua box.insert(5, 'testtest', 'firstname', 'lastname') +localhost> box.insert(5, 'testtest', 'firstname', 'lastname') --- - 'testtest': {'firstname', 'lastname'} ... -localhost> lua box.select(5, 1, 'firstname', 'lastname') +localhost> box.select(5, 1, 'firstname', 'lastname') --- - 'testtest': {'firstname', 'lastname'} ... @@ -509,31 +509,31 @@ localhost> lua box.select(5, 1, 'firstname', 'lastname') Returns the updated tuple. <bridgehead renderas="sect4">Example</bridgehead> <programlisting> -localhost> lua box.insert(0, 0, 'hello world') +localhost> box.insert(0, 0, 'hello world') --- - 0: {'hello world'} ... -localhost> lua box.update(0, 0, '+p', 1, 1) -- add value 1 to field #1 +localhost> box.update(0, 0, '+p', 1, 1) -- add value 1 to field #1 --- error: 'Field type does not match one required by operation: expected a 32-bit or 64-bit int' ... -localhost> lua box.update(0, 0, '+p', 0, 2) -- add value 2 to field 0 +localhost> box.update(0, 0, '+p', 0, 2) -- add value 2 to field 0 --- - 2: {'hello world'} ... -localhost> lua box.update(0, 2, '!p', 1, 'Bienvenue tout le monde!') +localhost> box.update(0, 2, '!p', 1, 'Bienvenue tout le monde!') --- - 2: {'Bienvenue tout le monde!', 'hello world'} ... -localhost> lua box.update(0, 2, '#p', 2, 1) +localhost> box.update(0, 2, '#p', 2, 1) --- - 2: {'Bienvenue tout le monde!'} ... -localhost> lua box.insert(0, 3, 'crocodile', 'giraffe', 'baobab', 'bamblebee', 'hippopotamus', 'rhino') +localhost> box.insert(0, 3, 'crocodile', 'giraffe', 'baobab', 'bamblebee', 'hippopotamus', 'rhino') --- - 3: {'crocodile', 'giraffe', 'baobab', 'bamblebee', 'hippopotamus', 'rhino'} ... -localhost> lua box.update(0, 3, '#p', 3, 2) +localhost> box.update(0, 3, '#p', 3, 2) --- - 3: {'crocodile', 'giraffe', 'hippopotamus', 'rhino'} ... @@ -609,26 +609,26 @@ localhost> insert into t4 values ('2', '2') Insert OK, 1 rows affected localhost> insert into t4 values ('3', '3') Insert OK, 1 rows affected -ocalhost> lua box.select_range(4, 0, 10) +ocalhost> box.select_range(4, 0, 10) --- - '3': {'3'} - '0': {'0'} - '1': {'1'} - '2': {'2'} ... -localhost> lua box.select_range(4, 1, 10) +localhost> box.select_range(4, 1, 10) --- - '0': {'0'} - '1': {'1'} - '2': {'2'} - '3': {'3'} ... -localhost> lua box.select_range(4, 1, 2) +localhost> box.select_range(4, 1, 2) --- - '0': {'0'} - '1': {'1'} ... -localhost> lua box.select_range(4, 1, 2, '1') +localhost> box.select_range(4, 1, 2, '1') --- - '1': {'1'} - '2': {'2'} @@ -679,23 +679,23 @@ localhost> insert into t4 values ('2', '2') Insert OK, 1 rows affected localhost> insert into t4 values ('3', '3') Insert OK, 1 rows affected -localhost> lua box.select_reverse_range(4, 0, 10) +localhost> box.select_reverse_range(4, 0, 10) --- error: 'Illegal parameters, hash iterator is forward only ... -localhost> lua box.select_reverse_range(4, 1, 10) +localhost> box.select_reverse_range(4, 1, 10) --- - '3': {'3'} - '2': {'2'} - '1': {'1'} - '0': {'0'} ... -localhost> lua box.select_reverse_range(4, 1, 2) +localhost> box.select_reverse_range(4, 1, 2) --- - '3': {'3'} - '2': {'2'} ... -localhost> lua box.select_reverse_range(4, 1, 2, '1') +localhost> box.select_reverse_range(4, 1, 2, '1') --- - '1': {'1'} - '0': {'0'} @@ -782,27 +782,27 @@ localhost> lua box.select_reverse_range(4, 1, 2, '1') Unknown format specifier. <bridgehead renderas="sect4">Example</bridgehead> <programlisting> -localhost> lua box.insert(0, 0, 'hello world') +localhost> box.insert(0, 0, 'hello world') --- - 0: {'hello world'} ... -localhost> lua box.update(0, 0, "=p", 1, 'bye world') +localhost> box.update(0, 0, "=p", 1, 'bye world') --- - 0: {'bye world'} ... -localhost> lua box.update(0, 0, ":p", 1, box.pack('ppp', 0, 3, 'hello')) +localhost> box.update(0, 0, ":p", 1, box.pack('ppp', 0, 3, 'hello')) --- - 0: {'hello world'} ... -localhost> lua box.update(0, 0, "=p", 1, 4) +localhost> box.update(0, 0, "=p", 1, 4) --- - 0: {4} ... -localhost> lua box.update(0, 0, "+p", 1, 4) +localhost> box.update(0, 0, "+p", 1, 4) --- - 0: {8} ... -localhost> lua box.update(0, 0, "^p", 1, 4) +localhost> box.update(0, 0, "^p", 1, 4) --- - 0: {12} ... @@ -815,40 +815,40 @@ localhost> lua box.update(0, 0, "^p", 1, 4) <listitem><para> Counterpart to <code>box.pack()</code>. <bridgehead renderas="sect4">Example</bridgehead> -<programlisting>localhost> lua tuple=box.replace(2, 0) +<programlisting>localhost> tuple=box.replace(2, 0) --- ... -localhost> lua string.len(tuple[0]) +localhost> string.len(tuple[0]) --- - 4 ... -localhost> lua box.unpack('i', tuple[0]) +localhost> box.unpack('i', tuple[0]) --- - 0 ... -localhost> lua box.unpack('bsil', box.pack('bsil', 255, 65535, 4294967295, tonumber64('18446744073709551615'))) +localhost> box.unpack('bsil', box.pack('bsil', 255, 65535, 4294967295, tonumber64('18446744073709551615'))) --- - 255 - 65535 - 4294967295 - 18446744073709551615 ... -localhost> lua num, str, num64 = box.unpack('ppp', box.pack('ppp', 666, 'string', tonumber64('666666666666666'))) +localhost> num, str, num64 = box.unpack('ppp', box.pack('ppp', 666, 'string', tonumber64('666666666666666'))) --- ... -localhost> lua print(box.unpack('i', num)); +localhost> print(box.unpack('i', num)); --- 666 ... -localhost> lua print(str); +localhost> print(str); --- string ... -localhost> lua print(box.unpack('l', num64)) +localhost> print(box.unpack('l', num64)) --- 666666666666666 ... -localhost> lua box.unpack('=p', box.pack('=p', 1, '666')) +localhost> box.unpack('=p', box.pack('=p', 1, '666')) --- - 1 - 666 @@ -890,20 +890,20 @@ Note: the administrative console output must be YAML-compatible. an arbitrary piece of Lua code, without having to introduce changes to the global Lua environment. <bridgehead renderas="sect4">Example</bridgehead> -<programlisting>lua box.dostring('abc') +<programlisting>box.dostring('abc') --- error: '[string "abc"]:1: ''='' expected near ''<eof>''' ... -lua box.dostring('return 1') +box.dostring('return 1') --- - 1 ... -lua box.dostring('return ...', 'hello', 'world') +box.dostring('return ...', 'hello', 'world') --- - hello - world ... -lua box.dostring('local f = function(key) t=box.select(0, 0, key); if t ~= nil then return t[0] else return nil end end return f(...)', 0) +box.dostring('local f = function(key) t=box.select(0, 0, key); if t ~= nil then return t[0] else return nil end end return f(...)', 0) --- - nil ... @@ -964,7 +964,7 @@ lua box.dostring('local f = function(key) t=box.select(0, 0, key); if t ~= nil t </para> <bridgehead renderas="sect4">Example</bridgehead> <programlisting> - lua box.uuid_hex() + box.uuid_hex() --- - a4f29fa0eb6d11e19f7737696d7fa8ff ... @@ -994,7 +994,7 @@ lua box.dostring('local f = function(key) t=box.select(0, 0, key); if t ~= nil t </para> <bridgehead renderas="sect4">Example</bridgehead> <programlisting> - lua box.raise(box.error.ER_WAL_IO, 'Wal I/O error') + box.raise(box.error.ER_WAL_IO, 'Wal I/O error') --- error: 'Wal I/O error' ... @@ -1012,11 +1012,11 @@ lua box.dostring('local f = function(key) t=box.select(0, 0, key); if t ~= nil t NUM or NUM64 primary key index of type TREE. </para> <bridgehead renderas="sect4">Example</bridgehead> - <programlisting>localhost> lua box.auto_increment(0, "I am a duplicate") + <programlisting>localhost> box.auto_increment(0, "I am a duplicate") --- - 1: {'I am a duplicate'} ... -localhost> lua box.auto_increment(0, "I am a duplicate") +localhost> box.auto_increment(0, "I am a duplicate") --- - 2: {'I am a duplicate'} ... @@ -1037,11 +1037,11 @@ localhost> lua box.auto_increment(0, "I am a duplicate") new counter value back. </para> <bridgehead renderas="sect4">Example</bridgehead> - <programlisting>localhost> lua box.counter.inc(0, 'top.mail.ru') + <programlisting>localhost> box.counter.inc(0, 'top.mail.ru') --- - 1 ... -localhost> lua box.counter.inc(0, 'top.mail.ru') +localhost> box.counter.inc(0, 'top.mail.ru') --- - 2 ...</programlisting> @@ -1058,11 +1058,11 @@ localhost> lua box.counter.inc(0, 'top.mail.ru') drops to 0, the tuple is deleted. </para> <bridgehead renderas="sect4">Example</bridgehead> - <programlisting>localhost> lua box.counter.dec(0, 'top.mail.ru') + <programlisting>localhost> box.counter.dec(0, 'top.mail.ru') --- - 1 ... -localhost> lua box.counter.dec(0, 'top.mail.ru') +localhost> box.counter.dec(0, 'top.mail.ru') --- - 0 ...</programlisting> @@ -1086,23 +1086,23 @@ localhost> lua box.counter.dec(0, 'top.mail.ru') <listitem><para> <bridgehead renderas="sect4">Example</bridgehead> <programlisting> -localhost> lua t=box.insert(0, 1, 'abc', 'cde', 'efg', 'ghq', 'qkl') +localhost> t=box.insert(0, 1, 'abc', 'cde', 'efg', 'ghq', 'qkl') --- ... -localhost> lua #t +localhost> #t --- - 6 ... -localhost> lua t[1], t[5] +localhost> t[1], t[5] --- - abc - qkl ... -localhost> lua t[6] +localhost> t[6] --- error: 'Lua error: [string "return t[6]"]:1: box.tuple: index 6 is out of bounds (0..5)' ... -localhost> lua for k,v in t:pairs() do print(v) end +localhost> for k,v in t:pairs() do print(v) end --- abc @@ -1111,7 +1111,7 @@ efg ghq qkl ... -localhost> lua t:unpack() +localhost> t:unpack() --- - - abc @@ -1120,58 +1120,58 @@ localhost> lua t:unpack() - ghq - qkl ... -localhost> lua t:slice(1, 2) +localhost> t:slice(1, 2) --- - abc ... -localhost> lua t:slice(1, 3) +localhost> t:slice(1, 3) --- - abc - cde ... -localhost> lua t:slice(1, -1) +localhost> t:slice(1, -1) --- - abc - cde - efg - ghq ... -localhost> lua t:transform(1, 3) +localhost> t:transform(1, 3) --- - 1: {'ghq', 'qkl'} ... -localhost> lua t:transform(0, 1, 'zyx') +localhost> t:transform(0, 1, 'zyx') --- - 'zyx': {'abc', 'cde', 'efg', 'ghq', 'qkl'} ... -localhost> lua t:transform(-1, 1, 'zyx') +localhost> t:transform(-1, 1, 'zyx') --- - 1: {'abc', 'cde', 'efg', 'ghq', 'zyx'} ... -localhost> lua t=box.insert(0, 'abc', 'def', 'abc') +localhost> t=box.insert(0, 'abc', 'def', 'abc') --- ... -localhost> lua t:find('abc') +localhost> t:find('abc') --- - 0 ... -localhost> lua t:findall('abc') +localhost> t:findall('abc') --- - 0 - 2 ... -localhost> lua t:find(1, 'abc') +localhost> t:find(1, 'abc') --- - 2 ... -localhost> lua t = box.tuple.new('abc') +localhost> t = box.tuple.new('abc') --- ... -localhost> lua t +localhost> t --- - 'abc': {} ... -localhost> lua t:bsize() +localhost> t:bsize() --- - 4 ... @@ -1186,7 +1186,7 @@ localhost> lua t:bsize() Construct a new tuple from a Lua table or a scalar. </para> <bridgehead renderas="sect4">Example</bridgehead> - <programlisting>localhost> lua box.tuple.new({tonumber64('18446744073709551615'), 'string', 1}) + <programlisting>localhost> box.tuple.new({tonumber64('18446744073709551615'), 'string', 1}) --- - 18446744073709551615: {'string', 1} ... @@ -1222,35 +1222,35 @@ localhost> lua t:bsize() </variablelist> <bridgehead renderas="sect4">Example</bridgehead> <programlisting> -lua box.cjson.encode(123) +box.cjson.encode(123) --- - 123 ... -lua box.cjson.encode({123}) +box.cjson.encode({123}) --- - [123] ... -lua box.cjson.encode({123, 234, 345}) +box.cjson.encode({123, 234, 345}) --- - [123,234,345] ... -lua box.cjson.encode({abc = 234, cde = 345}) +box.cjson.encode({abc = 234, cde = 345}) --- - {"cde":345,"abc":234} ... -lua box.cjson.encode({hello = { 'world' } }) +box.cjson.encode({hello = { 'world' } }) --- - {"hello":["world"]} ... -lua box.cjson.decode('123') +box.cjson.decode('123') --- - 123 ... -lua box.cjson.decode('[123, "hello"]')[2] +box.cjson.decode('[123, "hello"]')[2] --- - hello ... -lua box.cjson.decode('{"hello": "world"}').hello +box.cjson.decode('{"hello": "world"}').hello --- - world ... @@ -1418,7 +1418,7 @@ lua box.cjson.decode('{"hello": "world"}').hello </simpara> <bridgehead renderas="sect4">Example</bridgehead> <programlisting> -localhost> lua for k,v in box.space[0]:pairs() do print(v) end +localhost> for k,v in box.space[0]:pairs() do print(v) end --- 1: {'hello'} 2: {'my '} @@ -1560,19 +1560,19 @@ localhost> INSERT INTO t0 VALUES (5, 2, 1) Insert OK, 1 rows affected localhost> INSERT INTO t0 VALUES (6, 2, 2) Insert OK, 1 rows affected -localhost> lua it = box.space[0].index[1]:iterator(box.index.EQ, 1); print(it(), " ", it(), " ", it()); +localhost> it = box.space[0].index[1]:iterator(box.index.EQ, 1); print(it(), " ", it(), " ", it()); --- 1: {1, 0} 2: {1, 1} 3: {1, 2} ... -localhost> lua it = box.space[0].index[1]:iterator(box.index.EQ, 1, 2); print(it(), " ", it(), " ", it()); +localhost> it = box.space[0].index[1]:iterator(box.index.EQ, 1, 2); print(it(), " ", it(), " ", it()); --- 3: {1, 2} nil nil ... -localhost> lua i = box.space[0].index[1]:iterator(box.index.GE, 2, 1); print(it(), " ", it(), " ", it()); +localhost> i = box.space[0].index[1]:iterator(box.index.GE, 2, 1); print(it(), " ", it(), " ", it()); --- 5: {2, 1} 6: {2, 2} nil ... -localhost> lua for v in box.space[0].index[1]:iterator(box.index.ALL) do print(v) end +localhost> for v in box.space[0].index[1]:iterator(box.index.ALL) do print(v) end --- 1: {1, 0} 2: {1, 1} @@ -1581,7 +1581,7 @@ localhost> lua for v in box.space[0].index[1]:iterator(box.index.ALL) do print(v 5: {2, 1} 6: {2, 2} ... -localhost> lua i = box.space[0].index[0]:iterator(box.index.LT, 1); +localhost> i = box.space[0].index[0]:iterator(box.index.LT, 1); --- error: 'Iterator type is not supported' </programlisting> @@ -2587,7 +2587,7 @@ self:insert("1", "Hello", "World") <varlistentry> <term><emphasis role="lua">box.cfg</emphasis></term> <listitem><bridgehead renderas="sect4">Example</bridgehead><programlisting> -localhost> lua for k, v in pairs(box.cfg) do print(k, " = ", v) end +localhost> for k, v in pairs(box.cfg) do print(k, " = ", v) end --- io_collect_interval = 0 pid_file = box.pid @@ -2624,7 +2624,7 @@ logger = cat - >> tarantool.log </simpara> <bridgehead renderas="sect4">Example</bridgehead><programlisting> -localhost> lua for k,v in pairs(box.info()) do print(k, ": ", v) end +localhost> for k,v in pairs(box.info()) do print(k, ": ", v) end --- version: 1.4.7-92-g4ba95ca status: primary @@ -2646,47 +2646,47 @@ config: /home/unera/work/tarantool/test/box/tarantool_good.cfg </term> <listitem> <bridgehead renderas="sect4">Example</bridgehead><programlisting> -localhost> lua box.info.pid +localhost> box.info.pid --- - 1747 ... -localhost> lua box.info.logger_pid +localhost> box.info.logger_pid --- - 1748 ... -localhost> lua box.info.version +localhost> box.info.version --- - 1.4.7-92-g4ba95ca ... -localhost> lua box.info.config +localhost> box.info.config --- - /home/unera/work/tarantool/test/box/tarantool_good.cfg ... -localhost> lua box.info.uptime +localhost> box.info.uptime --- - 3672 ... -localhost> lua box.info.lsn +localhost> box.info.lsn --- - 1712 ... -localhost> lua box.info.status +localhost> box.info.status --- - primary ... -localhost> lua box.info.recovery_lag +localhost> box.info.recovery_lag --- - 0.000 ... -localhost> lua box.info.recovery_last_update +localhost> box.info.recovery_last_update --- - 1306964594.980 ... -localhost> lua box.info.snapshot_pid +localhost> box.info.snapshot_pid --- - 0 ... -localhost> lua for k, v in pairs(box.info.build) do print(k .. ': ', v) end +localhost> for k, v in pairs(box.info.build) do print(k .. ': ', v) end --- flags: -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCORO_ASM -fno-omit-frame-pointer -fno-stack-protector -fexceptions -funwind-tables -fgnu89-inline -pthread -Wno-sign-compare -Wno-strict-aliasing -std=gnu99 -Wall -Wextra -Werror target: Linux-x86_64-Debug @@ -2703,20 +2703,20 @@ options: cmake . -DCMAKE_INSTALL_PREFIX=/usr/local -DENABLE_STATIC=OFF -DENABLE_ <varlistentry> <term><emphasis role="lua">box.slab</emphasis></term> <listitem><bridgehead renderas="sect4">Example</bridgehead><programlisting> -localhost> lua box.slab.arena_used +localhost> box.slab.arena_used --- - 4194304 ... -localhost> lua box.slab.arena_size +localhost> box.slab.arena_size --- - 104857600 ... -localhost> lua for k, v in pairs(box.slab.slabs) do print(k) end +localhost> for k, v in pairs(box.slab.slabs) do print(k) end --- 64 128 ... -localhost> lua for k, v in pairs(box.slab.slabs[64]) do print(k, ':', v) end +localhost> for k, v in pairs(box.slab.slabs[64]) do print(k, ':', v) end --- items:1 bytes_used:160 @@ -2735,15 +2735,15 @@ bytes_free:4194144 <varlistentry> <term><emphasis role="lua">box.stat</emphasis></term> <listitem><bridgehead renderas="sect4">Example</bridgehead><programlisting> -localhost> lua box.stat -- a virtual table +localhost> box.stat -- a virtual table --- - table: 0x41a07a08 ... -localhost> lua box.stat() -- a full table (the same) +localhost> box.stat() -- a full table (the same) --- - table: 0x41a0ebb0 ... -localhost> lua for k, v in pairs(box.stat()) do print(k) end +localhost> for k, v in pairs(box.stat()) do print(k) end --- DELETE SELECT @@ -2752,17 +2752,17 @@ CALL UPDATE DELETE_1_3 ... -localhost> lua for k, v in pairs(box.stat().DELETE) do print(k, ': ', v) end +localhost> for k, v in pairs(box.stat().DELETE) do print(k, ': ', v) end --- total: 23210 rps: 22 ... -localhost> lua for k, v in pairs(box.stat.DELETE) do print(k, ': ', v) end -- the same +localhost> for k, v in pairs(box.stat.DELETE) do print(k, ': ', v) end -- the same --- total: 23210 rps: 22 ... -localhost> lua for k, v in pairs(box.stat.SELECT) do print(k, ': ', v) end +localhost> for k, v in pairs(box.stat.SELECT) do print(k, ': ', v) end --- total: 34553330 rps: 23 diff --git a/doc/user/target.db b/doc/user/target.db index 20f40ca7c4..67cd80f801 100644 --- a/doc/user/target.db +++ b/doc/user/target.db @@ -1,5 +1,7 @@ -<div element="book" href="#tarantool-user-guide" number="" targetptr="tarantool-user-guide"><ttl>Tarantool User Guide, version 1.5.1-28-g4f96b1a</ttl><xreftext>Tarantool User Guide, version 1.5.1-28-g4f96b1a</xreftext><div element="chapter" href="#preface" number="1" targetptr="preface"><ttl>Preface</ttl><xreftext>Chapter 1, <i>Preface</i></xreftext><div element="section" href="#tarantool-overview" number="" targetptr="tarantool-overview"><ttl>Tarantool: an overview</ttl><xreftext>the section called “Tarantool: an overviewâ€</xreftext></div><div element="section" href="#manual-conventions" number="" targetptr="manual-conventions"><ttl>Conventions</ttl><xreftext>the section called “Conventionsâ€</xreftext></div><div element="section" href="#reporting-bugs" number="" targetptr="reporting-bugs"><ttl>Reporting bugs</ttl><xreftext>the section called “Reporting bugsâ€</xreftext></div></div><div element="chapter" href="#getting-started" number="2" targetptr="getting-started"><ttl>Getting started</ttl><xreftext>Chapter 2, <i>Getting started</i></xreftext></div><div element="chapter" href="#data-and-persistence" number="3" targetptr="data-and-persistence"><ttl>Data model and data persistence</ttl><xreftext>Chapter 3, <i>Data model and data persistence</i></xreftext><div element="section" href="#dynamic-data-model" number="" targetptr="dynamic-data-model"><ttl>Dynamic data model</ttl><xreftext>the section called “Dynamic data modelâ€</xreftext></div><div element="section" href="#data-persistence" number="" targetptr="data-persistence"><ttl>Data persistence</ttl><xreftext>the section called “Data persistenceâ€</xreftext></div></div><div element="chapter" href="#language-reference" number="4" targetptr="language-reference"><ttl>Language reference</ttl><xreftext>Chapter 4, <i>Language reference</i></xreftext><div element="section" href="#data-manipulation" number="" targetptr="data-manipulation"><ttl>Data manipulation</ttl><xreftext>the section called “Data manipulationâ€</xreftext><div element="section" href="#memcached-protocol" number="" targetptr="memcached-protocol"><ttl>Memcached protocol</ttl><xreftext>the section called “Memcached protocolâ€</xreftext></div></div><div element="section" href="#administrative-console" number="" targetptr="administrative-console"><ttl>Administrative console</ttl><xreftext>the section called “Administrative consoleâ€</xreftext><obj element="term" href="#save-snapshot" number="" targetptr="save-snapshot"><ttl>???TITLE???</ttl><xreftext>SAVE SNAPSHOT</xreftext></obj><obj element="term" href="#reload-configuration" number="" targetptr="reload-configuration"><ttl>???TITLE???</ttl><xreftext>RELOAD CONFIGURATION</xreftext></obj><obj element="term" href="#show-configuration" number="" targetptr="show-configuration"><ttl>???TITLE???</ttl><xreftext>SHOW CONFIGURATION</xreftext></obj><obj element="term" href="#show-info" number="" targetptr="show-info"><ttl>???TITLE???</ttl><xreftext>SHOW INFO</xreftext></obj><obj element="term" href="#show-stat" number="" targetptr="show-stat"><ttl>???TITLE???</ttl><xreftext>SHOW STAT</xreftext></obj><obj element="term" href="#show-slab" number="" targetptr="show-slab"><ttl>???TITLE???</ttl><xreftext>SHOW SLAB</xreftext></obj><obj element="term" href="#show-palloc" number="" targetptr="show-palloc"><ttl>???TITLE???</ttl><xreftext>SHOW PALLOC</xreftext></obj><obj element="term" href="#save-coredump" number="" targetptr="save-coredump"><ttl>???TITLE???</ttl><xreftext>SAVE COREDUMP</xreftext></obj><obj element="term" href="#show-fiber" number="" targetptr="show-fiber"><ttl>???TITLE???</ttl><xreftext>SHOW FIBER</xreftext></obj><obj element="term" href="#lua-command" number="" targetptr="lua-command"><ttl>???TITLE???</ttl><xreftext>LUA ...</xreftext></obj></div><div element="section" href="#stored-procedures" number="" targetptr="stored-procedures"><ttl>Writing stored procedures in Lua</ttl><xreftext>the section called “Writing stored procedures in Luaâ€</xreftext><obj element="filename" href="#init.lua" number="" targetptr="init.lua"><ttl>???TITLE???</ttl><xreftext>init.lua</xreftext></obj><obj element="term" href="#tonumber64" number="" targetptr="tonumber64"><ttl>???TITLE???</ttl><xreftext>tonumber64</xreftext></obj><div element="section" href="#sp-box" number="" targetptr="sp-box"><ttl>Package <code class="code">box</code></ttl><xreftext>the section called “Package <code class="code">box</code>â€</xreftext><obj element="variablelist" href="#box" number="" targetptr="box"><ttl>???TITLE???</ttl><xreftext>box</xreftext></obj><obj element="emphasis" href="#box.process" number="" targetptr="box.process"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.select" number="" targetptr="box.select"><ttl>???TITLE???</ttl><xreftext>box.select</xreftext></obj><obj element="emphasis" href="#box.insert" number="" targetptr="box.insert"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.select_limit" number="" targetptr="box.select_limit"><ttl>???TITLE???</ttl><xreftext>box.select_limit</xreftext></obj><obj element="emphasis" href="#box.replace" number="" targetptr="box.replace"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.update" number="" targetptr="box.update"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.delete" number="" targetptr="box.delete"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.select_range" number="" targetptr="box.select_range"><ttl>???TITLE???</ttl><xreftext>box.select_range</xreftext></obj><obj element="emphasis" href="#box.select_reverse_range" number="" targetptr="box.select_reverse_range"><ttl>???TITLE???</ttl><xreftext>box.select_reverse_range</xreftext></obj></div><div element="section" href="#sp-box-tuple" number="" targetptr="sp-box-tuple"><ttl>Package <code class="code">box.tuple</code></ttl><xreftext>the section called “Package <code class="code">box.tuple</code>â€</xreftext><obj element="variablelist" href="#box.tuple" number="" targetptr="box.tuple"><ttl>???TITLE???</ttl><xreftext>box.tuple</xreftext></obj></div><div element="section" href="#sp-box-cjson" number="" targetptr="sp-box-cjson"><ttl>Package <code class="code">box.cjson</code></ttl><xreftext>the section called “Package <code class="code">box.cjson</code>â€</xreftext><obj element="variablelist" href="#box.cjson" number="" targetptr="box.cjson"><ttl>???TITLE???</ttl><xreftext>box.cjson</xreftext></obj></div><div element="section" href="#sp-box-space" number="" targetptr="sp-box-space"><ttl>Package <code class="code">box.space</code></ttl><xreftext>the section called “Package <code class="code">box.space</code>â€</xreftext><obj element="variablelist" href="#box.space" number="" targetptr="box.space"><ttl>???TITLE???</ttl><xreftext>box.space</xreftext></obj><obj element="emphasis" href="#box.space.select_range" number="" targetptr="box.space.select_range"><ttl>???TITLE???</ttl><xreftext>box.space[i].select_range()</xreftext></obj><obj element="emphasis" href="#box.space.select_reverse_range" number="" targetptr="box.space.select_reverse_range"><ttl>???TITLE???</ttl><xreftext>box.space.select_reverse_range</xreftext></obj></div><div element="section" href="#sp-box-index" number="" targetptr="sp-box-index"><ttl>Package <code class="code">box.index</code></ttl><xreftext>the section called “Package <code class="code">box.index</code>â€</xreftext><obj element="variablelist" href="#box.index" number="" targetptr="box.index"><ttl>???TITLE???</ttl><xreftext>box.index</xreftext></obj><obj element="emphasis" href="#box.index.iterator" number="" targetptr="box.index.iterator"><ttl>???TITLE???</ttl><xreftext>box.index.iterator(type, ...)</xreftext></obj><obj element="para" href="#iterator-consistency" number="" targetptr="iterator-consistency"><ttl>???TITLE???</ttl><xreftext/></obj><obj element="para" href="#iterator-types" number="" targetptr="iterator-types"><ttl>???TITLE???</ttl><xreftext/></obj><obj element="table" href="#idp25487136" number="4.1"><ttl>Common iterator types</ttl><xreftext>Table 4.1, “Common iterator typesâ€</xreftext></obj><obj element="table" href="#idp25263056" number="4.2"><ttl>TREE iterator types</ttl><xreftext>Table 4.2, “TREE iterator typesâ€</xreftext></obj><obj element="table" href="#idp25506032" number="4.3"><ttl>BITSET iterator types</ttl><xreftext>Table 4.3, “BITSET iterator typesâ€</xreftext></obj></div><div element="section" href="#sp-box-fiber" number="" targetptr="sp-box-fiber"><ttl>Package <code class="code">box.fiber</code></ttl><xreftext>the section called “Package <code class="code">box.fiber</code>â€</xreftext><obj element="variablelist" href="#box.fiber" number="" targetptr="box.fiber"><ttl>???TITLE???</ttl><xreftext>???TITLE???</xreftext></obj><obj element="emphasis" href="#box.fiber.id" number="" targetptr="box.fiber.id"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.self" number="" targetptr="box.fiber.self"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.find" number="" targetptr="box.fiber.find"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.create" number="" targetptr="box.fiber.create"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.resume" number="" targetptr="box.fiber.resume"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.yield" number="" targetptr="box.fiber.yield"><ttl>???TITLE???</ttl><xreftext>box.fiber.yield(...)</xreftext></obj><obj element="emphasis" href="#box.fiber.detach" number="" targetptr="box.fiber.detach"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.wrap" number="" targetptr="box.fiber.wrap"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.sleep" number="" targetptr="box.fiber.sleep"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.status" number="" targetptr="box.fiber.status"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.cancel" number="" targetptr="box.fiber.cancel"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.testcancel" number="" targetptr="box.fiber.testcancel"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj></div><div element="section" href="#sp-box-session" number="" targetptr="sp-box-session"><ttl>Package <code class="code">box.session</code></ttl><xreftext>the section called “Package <code class="code">box.session</code>â€</xreftext></div><div element="section" href="#sp-box-ipc" number="" targetptr="sp-box-ipc"><ttl>Package <code class="code">box.ipc</code> — inter procedure communication</ttl><xreftext>the section called “Package <code class="code">box.ipc</code> — inter procedure communicationâ€</xreftext><obj element="variablelist" href="#box.ipc" number="" targetptr="box.ipc"><ttl>???TITLE???</ttl><xreftext>???TITLE???</xreftext></obj></div><div element="section" href="#sp-box-socket" number="" targetptr="sp-box-socket"><ttl>Package <code class="code">box.socket</code> — TCP and UDP sockets</ttl><xreftext>the section called “Package <code class="code">box.socket</code> — TCP and UDP socketsâ€</xreftext><obj element="variablelist" href="#box.socket" number="" targetptr="box.socket"><ttl>???TITLE???</ttl><xreftext>???TITLE???</xreftext></obj><obj element="table" href="#idp25417104" number="4.4"><ttl><code class="code">readline()</code> returns</ttl><xreftext>Table 4.4, “<code class="code">readline()</code> returnsâ€</xreftext></obj></div><div element="section" href="#sp-box-net-box" number="" targetptr="sp-box-net-box"><ttl>Package <code class="code">box.net.box</code> — working with networked Tarantool peers</ttl><xreftext>the section called “Package <code class="code">box.net.box</code> — working with networked Tarantool peersâ€</xreftext><obj element="variablelist" href="#box.net.box" number="" targetptr="box.net.box"><ttl>???TITLE???</ttl><xreftext>???TITLE???</xreftext></obj><obj element="emphasis" href="#box.net.box.new" number="" targetptr="box.net.box.new"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.ping" number="" targetptr="box.net.box.ping"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.close" number="" targetptr="box.net.box.close"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.select" number="" targetptr="box.net.box.select"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.select_limit" number="" targetptr="box.net.box.select_limit"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.select_range" number="" targetptr="box.net.box.select_range"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.insert" number="" targetptr="box.net.box.insert"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.replace" number="" targetptr="box.net.box.replace"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.update" number="" targetptr="box.net.box.update"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.delete" number="" targetptr="box.net.box.delete"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.call" number="" targetptr="box.net.box.call"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.timeout" number="" targetptr="box.net.box.timeout"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj></div><div element="section" href="#sp-box-cfg" number="" targetptr="sp-box-cfg"><ttl>Packages <code class="code">box.cfg</code>, +<div element="book" href="#tarantool-user-guide" number="" targetptr="tarantool-user-guide"><ttl>Tarantool User Guide, version 1.6.0-200-gcc37c54</ttl><xreftext>Tarantool User Guide, version 1.6.0-200-gcc37c54</xreftext><div element="chapter" href="#preface" number="1" targetptr="preface"><ttl>Preface</ttl><xreftext>Chapter 1, <i>Preface</i></xreftext><div element="section" href="#tarantool-overview" number="" targetptr="tarantool-overview"><ttl>Tarantool: an overview</ttl><xreftext>the section called “Tarantool: an overviewâ€</xreftext></div><div element="section" href="#manual-conventions" number="" targetptr="manual-conventions"><ttl>Conventions</ttl><xreftext>the section called “Conventionsâ€</xreftext></div><div element="section" href="#reporting-bugs" number="" targetptr="reporting-bugs"><ttl>Reporting bugs</ttl><xreftext>the section called “Reporting bugsâ€</xreftext></div></div><div element="chapter" href="#getting-started" number="2" targetptr="getting-started"><ttl>Getting started</ttl><xreftext>Chapter 2, <i>Getting started</i></xreftext></div><div element="chapter" href="#data-and-persistence" number="3" targetptr="data-and-persistence"><ttl>Data model and data persistence</ttl><xreftext>Chapter 3, <i>Data model and data persistence</i></xreftext><div element="section" href="#dynamic-data-model" number="" targetptr="dynamic-data-model"><ttl>Dynamic data model</ttl><xreftext>the section called “Dynamic data modelâ€</xreftext></div><div element="section" href="#data-persistence" number="" targetptr="data-persistence"><ttl>Data persistence</ttl><xreftext>the section called “Data persistenceâ€</xreftext></div></div><div element="chapter" href="#language-reference" number="4" targetptr="language-reference"><ttl>Language reference</ttl><xreftext>Chapter 4, <i>Language reference</i></xreftext><div element="section" href="#data-manipulation" number="" targetptr="data-manipulation"><ttl>Data manipulation</ttl><xreftext>the section called “Data manipulationâ€</xreftext></div><div element="section" href="#administrative-console" number="" targetptr="administrative-console"><ttl>Administrative console</ttl><xreftext>the section called “Administrative consoleâ€</xreftext><obj element="term" href="#box.snapshot" number="" targetptr="box.snapshot"><ttl>???TITLE???</ttl><xreftext>box.snapshot()</xreftext></obj><obj element="term" href="#box.cfg.reload" number="" targetptr="box.cfg.reload"><ttl>???TITLE???</ttl><xreftext>box.cfg.reload()</xreftext></obj><obj element="term" href="#box.cfg.show" number="" targetptr="box.cfg.show"><ttl>???TITLE???</ttl><xreftext>box.cfg()</xreftext></obj><obj element="term" href="#box.info" number="" targetptr="box.info"><ttl>???TITLE???</ttl><xreftext>box.info()</xreftext></obj><obj element="term" href="#box.stat.show" number="" targetptr="box.stat.show"><ttl>???TITLE???</ttl><xreftext>box.stat()</xreftext></obj><obj element="term" href="#box.slab.info" number="" targetptr="box.slab.info"><ttl>???TITLE???</ttl><xreftext>box.slab.info()</xreftext></obj><obj element="term" href="#box.coredump" number="" targetptr="box.coredump"><ttl>???TITLE???</ttl><xreftext>box.coredump()</xreftext></obj><obj element="term" href="#box.fiber.info" number="" targetptr="box.fiber.info"><ttl>???TITLE???</ttl><xreftext>box.fiber.info()</xreftext></obj><obj element="term" href="#lua-command" number="" targetptr="lua-command"><ttl>???TITLE???</ttl><xreftext> + <span class="tntadmin">...</span> + </xreftext></obj></div><div element="section" href="#stored-procedures" number="" targetptr="stored-procedures"><ttl>Writing stored procedures in Lua</ttl><xreftext>the section called “Writing stored procedures in Luaâ€</xreftext><obj element="filename" href="#init.lua" number="" targetptr="init.lua"><ttl>???TITLE???</ttl><xreftext>init.lua</xreftext></obj><obj element="term" href="#tonumber64" number="" targetptr="tonumber64"><ttl>???TITLE???</ttl><xreftext>tonumber64</xreftext></obj><div element="section" href="#sp-box" number="" targetptr="sp-box"><ttl>Package <code class="code">box</code></ttl><xreftext>the section called “Package <code class="code">box</code>â€</xreftext><obj element="variablelist" href="#box" number="" targetptr="box"><ttl>???TITLE???</ttl><xreftext>box</xreftext></obj><obj element="emphasis" href="#box.process" number="" targetptr="box.process"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.select" number="" targetptr="box.select"><ttl>???TITLE???</ttl><xreftext>box.select</xreftext></obj><obj element="emphasis" href="#box.insert" number="" targetptr="box.insert"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.select_limit" number="" targetptr="box.select_limit"><ttl>???TITLE???</ttl><xreftext>box.select_limit</xreftext></obj><obj element="emphasis" href="#box.replace" number="" targetptr="box.replace"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.update" number="" targetptr="box.update"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.delete" number="" targetptr="box.delete"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.select_range" number="" targetptr="box.select_range"><ttl>???TITLE???</ttl><xreftext>box.select_range</xreftext></obj><obj element="emphasis" href="#box.select_reverse_range" number="" targetptr="box.select_reverse_range"><ttl>???TITLE???</ttl><xreftext>box.select_reverse_range</xreftext></obj></div><div element="section" href="#sp-box-tuple" number="" targetptr="sp-box-tuple"><ttl>Package <code class="code">box.tuple</code></ttl><xreftext>the section called “Package <code class="code">box.tuple</code>â€</xreftext><obj element="variablelist" href="#box.tuple" number="" targetptr="box.tuple"><ttl>???TITLE???</ttl><xreftext>box.tuple</xreftext></obj></div><div element="section" href="#sp-box-cjson" number="" targetptr="sp-box-cjson"><ttl>Package <code class="code">box.cjson</code></ttl><xreftext>the section called “Package <code class="code">box.cjson</code>â€</xreftext><obj element="variablelist" href="#box.cjson" number="" targetptr="box.cjson"><ttl>???TITLE???</ttl><xreftext>box.cjson</xreftext></obj></div><div element="section" href="#sp-box-space" number="" targetptr="sp-box-space"><ttl>Package <code class="code">box.space</code></ttl><xreftext>the section called “Package <code class="code">box.space</code>â€</xreftext><obj element="variablelist" href="#box.space" number="" targetptr="box.space"><ttl>???TITLE???</ttl><xreftext>box.space</xreftext></obj><obj element="emphasis" href="#box.space.select_range" number="" targetptr="box.space.select_range"><ttl>???TITLE???</ttl><xreftext>box.space[i].select_range()</xreftext></obj><obj element="emphasis" href="#box.space.select_reverse_range" number="" targetptr="box.space.select_reverse_range"><ttl>???TITLE???</ttl><xreftext>box.space.select_reverse_range</xreftext></obj></div><div element="section" href="#sp-box-index" number="" targetptr="sp-box-index"><ttl>Package <code class="code">box.index</code></ttl><xreftext>the section called “Package <code class="code">box.index</code>â€</xreftext><obj element="variablelist" href="#box.index" number="" targetptr="box.index"><ttl>???TITLE???</ttl><xreftext>box.index</xreftext></obj><obj element="emphasis" href="#box.index.iterator" number="" targetptr="box.index.iterator"><ttl>???TITLE???</ttl><xreftext>box.index.iterator(type, ...)</xreftext></obj><obj element="para" href="#iterator-consistency" number="" targetptr="iterator-consistency"><ttl>???TITLE???</ttl><xreftext/></obj><obj element="para" href="#iterator-types" number="" targetptr="iterator-types"><ttl>???TITLE???</ttl><xreftext/></obj><obj element="table" href="#idp261792" number="4.1"><ttl>Common iterator types</ttl><xreftext>Table 4.1, “Common iterator typesâ€</xreftext></obj><obj element="table" href="#idp435056" number="4.2"><ttl>TREE iterator types</ttl><xreftext>Table 4.2, “TREE iterator typesâ€</xreftext></obj><obj element="table" href="#idp452512" number="4.3"><ttl>BITSET iterator types</ttl><xreftext>Table 4.3, “BITSET iterator typesâ€</xreftext></obj></div><div element="section" href="#sp-box-fiber" number="" targetptr="sp-box-fiber"><ttl>Package <code class="code">box.fiber</code></ttl><xreftext>the section called “Package <code class="code">box.fiber</code>â€</xreftext><obj element="variablelist" href="#box.fiber" number="" targetptr="box.fiber"><ttl>???TITLE???</ttl><xreftext>???TITLE???</xreftext></obj><obj element="emphasis" href="#box.fiber.id" number="" targetptr="box.fiber.id"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.self" number="" targetptr="box.fiber.self"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.find" number="" targetptr="box.fiber.find"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.create" number="" targetptr="box.fiber.create"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.resume" number="" targetptr="box.fiber.resume"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.yield" number="" targetptr="box.fiber.yield"><ttl>???TITLE???</ttl><xreftext>box.fiber.yield(...)</xreftext></obj><obj element="emphasis" href="#box.fiber.detach" number="" targetptr="box.fiber.detach"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.wrap" number="" targetptr="box.fiber.wrap"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.sleep" number="" targetptr="box.fiber.sleep"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.status" number="" targetptr="box.fiber.status"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.cancel" number="" targetptr="box.fiber.cancel"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.fiber.testcancel" number="" targetptr="box.fiber.testcancel"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj></div><div element="section" href="#sp-box-session" number="" targetptr="sp-box-session"><ttl>Package <code class="code">box.session</code></ttl><xreftext>the section called “Package <code class="code">box.session</code>â€</xreftext></div><div element="section" href="#sp-box-ipc" number="" targetptr="sp-box-ipc"><ttl>Package <code class="code">box.ipc</code> — inter procedure communication</ttl><xreftext>the section called “Package <code class="code">box.ipc</code> — inter procedure communicationâ€</xreftext><obj element="variablelist" href="#box.ipc" number="" targetptr="box.ipc"><ttl>???TITLE???</ttl><xreftext>???TITLE???</xreftext></obj></div><div element="section" href="#sp-box-socket" number="" targetptr="sp-box-socket"><ttl>Package <code class="code">box.socket</code> — TCP and UDP sockets</ttl><xreftext>the section called “Package <code class="code">box.socket</code> — TCP and UDP socketsâ€</xreftext><obj element="variablelist" href="#box.socket" number="" targetptr="box.socket"><ttl>???TITLE???</ttl><xreftext>???TITLE???</xreftext></obj><obj element="table" href="#idp737616" number="4.4"><ttl><code class="code">readline()</code> returns</ttl><xreftext>Table 4.4, “<code class="code">readline()</code> returnsâ€</xreftext></obj></div><div element="section" href="#sp-box-net-box" number="" targetptr="sp-box-net-box"><ttl>Package <code class="code">box.net.box</code> — working with networked Tarantool peers</ttl><xreftext>the section called “Package <code class="code">box.net.box</code> — working with networked Tarantool peersâ€</xreftext><obj element="variablelist" href="#box.net.box" number="" targetptr="box.net.box"><ttl>???TITLE???</ttl><xreftext>???TITLE???</xreftext></obj><obj element="emphasis" href="#box.net.box.new" number="" targetptr="box.net.box.new"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.ping" number="" targetptr="box.net.box.ping"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.close" number="" targetptr="box.net.box.close"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.select" number="" targetptr="box.net.box.select"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.select_limit" number="" targetptr="box.net.box.select_limit"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.select_range" number="" targetptr="box.net.box.select_range"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.insert" number="" targetptr="box.net.box.insert"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.replace" number="" targetptr="box.net.box.replace"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.update" number="" targetptr="box.net.box.update"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.delete" number="" targetptr="box.net.box.delete"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.call" number="" targetptr="box.net.box.call"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="emphasis" href="#box.net.box.timeout" number="" targetptr="box.net.box.timeout"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj></div><div element="section" href="#sp-box-cfg" number="" targetptr="sp-box-cfg"><ttl>Packages <code class="code">box.cfg</code>, <code class="code">box.info</code>, <code class="code">box.slab</code> and <code class="code">box.stat</code>: server introspection</ttl><xreftext>the section called “Packages <code class="code">box.cfg</code>, <code class="code">box.info</code>, <code class="code">box.slab</code> and - <code class="code">box.stat</code>: server introspectionâ€</xreftext><obj element="code" href="#box.cfg" number="" targetptr="box.cfg"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="code" href="#box.stat" number="" targetptr="box.stat"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj></div><div element="section" href="#sp-limitations" number="" targetptr="sp-limitations"><ttl>Limitation of stored procedures</ttl><xreftext>the section called “Limitation of stored proceduresâ€</xreftext></div></div><div element="section" href="#triggers" number="" targetptr="triggers"><ttl>Defining triggers in Lua</ttl><xreftext>the section called “Defining triggers in Luaâ€</xreftext><div element="section" href="#sp-box-session-triggers" number="" targetptr="sp-box-session-triggers"><ttl>Triggers on connect and disconnect</ttl><xreftext>session triggers</xreftext></div></div></div><div element="chapter" href="#replication" number="5" targetptr="replication"><ttl>Replication</ttl><xreftext>Chapter 5, <i>Replication</i></xreftext><div element="section" href="#replication-architecture" number="" targetptr="replication-architecture"><ttl>Replication architecture</ttl><xreftext>the section called “Replication architectureâ€</xreftext></div><div element="section" href="#setting-up-the-master" number="" targetptr="setting-up-the-master"><ttl>Setting up the master</ttl><xreftext>the section called “Setting up the masterâ€</xreftext></div><div element="section" href="#settin-up-a-replica" number="" targetptr="settin-up-a-replica"><ttl>Setting up a replica</ttl><xreftext>the section called “Setting up a replicaâ€</xreftext></div><div element="section" href="#recovering-from-a-degraded-state" number="" targetptr="recovering-from-a-degraded-state"><ttl>Recovering from a degraded state</ttl><xreftext>the section called “Recovering from a degraded stateâ€</xreftext></div></div><div element="chapter" href="#server-administration" number="6" targetptr="server-administration"><ttl>Server administration</ttl><xreftext>Chapter 6, <i>Server administration</i></xreftext><div element="section" href="#signal-handling" number="" targetptr="signal-handling"><ttl>Server signal handling</ttl><xreftext>the section called “Server signal handlingâ€</xreftext></div><div element="section" href="#os-install-notes" number="" targetptr="os-install-notes"><ttl>System-specific administration notes</ttl><xreftext>the section called “System-specific administration notesâ€</xreftext><div element="section" href="#Debian" number="" targetptr="Debian"><ttl>Debian GNU/Linux and Ubuntu</ttl><xreftext>the section called “Debian GNU/Linux and Ubuntuâ€</xreftext></div><div element="section" href="#rpm-based-distros" number="" targetptr="rpm-based-distros"><ttl>Fedora, RHEL, CentOS</ttl><xreftext>the section called “Fedora, RHEL, CentOSâ€</xreftext></div><div element="section" href="#FreeBSD" number="" targetptr="FreeBSD"><ttl>FreeBSD</ttl><xreftext>the section called “FreeBSDâ€</xreftext></div><div element="section" href="#mac-os-x" number="" targetptr="mac-os-x"><ttl>Mac OS X</ttl><xreftext>the section called “Mac OS Xâ€</xreftext></div></div></div><div element="chapter" href="#configuration-reference" number="7" targetptr="configuration-reference"><ttl>Configuration reference</ttl><xreftext>Chapter 7, <i>Configuration reference</i></xreftext><div element="section" href="#command-line-options" number="" targetptr="command-line-options"><ttl>Command line options</ttl><xreftext>the section called “Command line optionsâ€</xreftext><obj element="listitem" href="#help-option" number="" targetptr="help-option"><ttl>???TITLE???</ttl><xreftext/></obj><obj element="listitem" href="#version-option" number="" targetptr="version-option"><ttl>???TITLE???</ttl><xreftext/></obj><obj element="listitem" href="#config-option" number="" targetptr="config-option"><ttl>???TITLE???</ttl><xreftext/></obj><obj element="option" href="#init-storage-option" number="" targetptr="init-storage-option"><ttl>???TITLE???</ttl><xreftext>--init-storage</xreftext></obj></div><div element="section" href="#option-file" number="" targetptr="option-file"><ttl>The option file</ttl><xreftext>option file</xreftext><obj element="table" href="#idp25900960" number="7.1"><ttl>Basic parameters</ttl><xreftext>Table 7.1, “Basic parametersâ€</xreftext></obj><obj element="entry" href="#work_dir" number="" targetptr="work_dir"><ttl>???TITLE???</ttl><xreftext>work_dir</xreftext></obj><obj element="entry" href="#script_dir" number="" targetptr="script_dir"><ttl>???TITLE???</ttl><xreftext>script_dir</xreftext></obj><obj element="entry" href="#wal_dir" number="" targetptr="wal_dir"><ttl>???TITLE???</ttl><xreftext>wal_dir</xreftext></obj><obj element="entry" href="#snap_dir" number="" targetptr="snap_dir"><ttl>???TITLE???</ttl><xreftext>snap_dir</xreftext></obj><obj element="entry" href="#bind_ipaddr" number="" targetptr="bind_ipaddr"><ttl>???TITLE???</ttl><xreftext>bind_ipaddr</xreftext></obj><obj element="entry" href="#primary_port" number="" targetptr="primary_port"><ttl>???TITLE???</ttl><xreftext>primary_port</xreftext></obj><obj element="entry" href="#secondary_port" number="" targetptr="secondary_port"><ttl>???TITLE???</ttl><xreftext>secondary_port</xreftext></obj><obj element="entry" href="#admin_port" number="" targetptr="admin_port"><ttl>???TITLE???</ttl><xreftext>admin_port</xreftext></obj><obj element="entry" href="#custom_proc_title" number="" targetptr="custom_proc_title"><ttl>???TITLE???</ttl><xreftext>custom_proc_title</xreftext></obj><obj element="table" href="#idp25959344" number="7.2"><ttl>Configuring the storage</ttl><xreftext>Table 7.2, “Configuring the storageâ€</xreftext></obj><obj element="anchor" href="#slab_alloc_arena" number="" targetptr="slab_alloc_arena"><ttl>???TITLE???</ttl><xreftext>slab_alloc_arena</xreftext></obj><obj element="para" href="#space" number="" targetptr="space"><ttl>???TITLE???</ttl><xreftext>the section called “The option fileâ€</xreftext></obj><obj element="table" href="#idp25995312" number="7.3"><ttl>Binary logging and snapshots</ttl><xreftext>Table 7.3, “Binary logging and snapshotsâ€</xreftext></obj><obj element="entry" href="#rows_per_wal" number="" targetptr="rows_per_wal"><ttl>???TITLE???</ttl><xreftext>rows_per_wal</xreftext></obj><obj element="entry" href="#wal_mode" number="" targetptr="wal_mode"><ttl>???TITLE???</ttl><xreftext>wal_mode</xreftext></obj><obj element="table" href="#idp26030640" number="7.4"><ttl>Replication</ttl><xreftext>Table 7.4, “Replicationâ€</xreftext></obj><obj element="entry" href="#replication_port" number="" targetptr="replication_port"><ttl>???TITLE???</ttl><xreftext>replication_port</xreftext></obj><obj element="entry" href="#replication_source" number="" targetptr="replication_source"><ttl>???TITLE???</ttl><xreftext>replication_source</xreftext></obj><obj element="table" href="#idp26049680" number="7.5"><ttl>Networking</ttl><xreftext>Table 7.5, “Networkingâ€</xreftext></obj><obj element="table" href="#idp26069008" number="7.6"><ttl>Logging</ttl><xreftext>Table 7.6, “Loggingâ€</xreftext></obj><obj element="table" href="#idp26093904" number="7.7"><ttl>Memcached protocol support</ttl><xreftext>Table 7.7, “Memcached protocol supportâ€</xreftext></obj><obj element="anchor" href="#memcached_port" number="" targetptr="memcached_port"><ttl>???TITLE???</ttl><xreftext>memcached_port</xreftext></obj><obj element="anchor" href="#memcached_space" number="" targetptr="memcached_space"><ttl>???TITLE???</ttl><xreftext>memcached_space</xreftext></obj><obj element="anchor" href="#memcached_expire" number="" targetptr="memcached_expire"><ttl>???TITLE???</ttl><xreftext>memcached_expire</xreftext></obj></div></div><div element="chapter" href="#connectors" number="8" targetptr="connectors"><ttl>Connectors</ttl><xreftext>Chapter 8, <i>Connectors</i></xreftext><div element="section" href="#connector-c" number="" targetptr="connector-c"><ttl>C</ttl><xreftext>the section called “Câ€</xreftext></div><div element="section" href="#connector-node.js" number="" targetptr="connector-node.js"><ttl>node.js</ttl><xreftext>the section called “node.jsâ€</xreftext></div><div element="section" href="#connector-perl" number="" targetptr="connector-perl"><ttl>Perl</ttl><xreftext>the section called “Perlâ€</xreftext></div><div element="section" href="#connector-php" number="" targetptr="connector-php"><ttl>PHP</ttl><xreftext>the section called “PHPâ€</xreftext></div><div element="section" href="#connector-python" number="" targetptr="connector-python"><ttl>Python</ttl><xreftext>the section called “Pythonâ€</xreftext></div><div element="section" href="#connector-ruby" number="" targetptr="connector-ruby"><ttl>Ruby</ttl><xreftext>the section called “Rubyâ€</xreftext></div></div><div element="appendix" href="#proctitle" number="A" targetptr="proctitle"><ttl>Server process titles</ttl><xreftext>Appendix A, <i>Server process titles</i></xreftext></div><div element="appendix" href="#errcode" number="B" targetptr="errcode"><ttl>List of error codes</ttl><xreftext>Appendix B, <i>List of error codes</i></xreftext><obj element="term" href="#ER_NONMASTER" number="" targetptr="ER_NONMASTER"><ttl>???TITLE???</ttl><xreftext>ER_NONMASTER</xreftext></obj><obj element="term" href="#ER_ILLEGAL_PARAMS" number="" targetptr="ER_ILLEGAL_PARAMS"><ttl>???TITLE???</ttl><xreftext>ER_ILLEGAL_PARAMS</xreftext></obj><obj element="term" href="#ER_MEMORY_ISSUE" number="" targetptr="ER_MEMORY_ISSUE"><ttl>???TITLE???</ttl><xreftext>ER_MEMORY_ISSUE</xreftext></obj><obj element="term" href="#ER_WAL_IO" number="" targetptr="ER_WAL_IO"><ttl>???TITLE???</ttl><xreftext>ER_WAL_IO</xreftext></obj><obj element="term" href="#ER_INDEX_VIOLATION" number="" targetptr="ER_INDEX_VIOLATION"><ttl>???TITLE???</ttl><xreftext>ER_INDEX_VIOLATION</xreftext></obj><obj element="term" href="#ER_KEY_PART_COUNT" number="" targetptr="ER_KEY_PART_COUNT"><ttl>???TITLE???</ttl><xreftext>ER_KEY_PART_COUNT</xreftext></obj><obj element="term" href="#ER_NO_SUCH_SPACE" number="" targetptr="ER_NO_SUCH_SPACE"><ttl>???TITLE???</ttl><xreftext>ER_NO_SUCH_SPACE</xreftext></obj><obj element="term" href="#ER_NO_SUCH_INDEX" number="" targetptr="ER_NO_SUCH_INDEX"><ttl>???TITLE???</ttl><xreftext>ER_NO_SUCH_INDEX</xreftext></obj><obj element="term" href="#ER_PROC_LUA" number="" targetptr="ER_PROC_LUA"><ttl>???TITLE???</ttl><xreftext>ER_PROC_LUA</xreftext></obj><obj element="term" href="#ER_FIBER_STACK" number="" targetptr="ER_FIBER_STACK"><ttl>???TITLE???</ttl><xreftext>ER_FIBER_STACK</xreftext></obj></div></div> + <code class="code">box.stat</code>: server introspectionâ€</xreftext><obj element="code" href="#box.cfg" number="" targetptr="box.cfg"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj><obj element="code" href="#box.stat" number="" targetptr="box.stat"><ttl>???TITLE???</ttl><xreftext>???</xreftext></obj></div><div element="section" href="#sp-limitations" number="" targetptr="sp-limitations"><ttl>Limitation of stored procedures</ttl><xreftext>the section called “Limitation of stored proceduresâ€</xreftext></div></div><div element="section" href="#triggers" number="" targetptr="triggers"><ttl>Defining triggers in Lua</ttl><xreftext>the section called “Defining triggers in Luaâ€</xreftext><div element="section" href="#sp-box-session-triggers" number="" targetptr="sp-box-session-triggers"><ttl>Triggers on connect and disconnect</ttl><xreftext>session triggers</xreftext></div></div></div><div element="chapter" href="#replication" number="5" targetptr="replication"><ttl>Replication</ttl><xreftext>Chapter 5, <i>Replication</i></xreftext><div element="section" href="#replication-architecture" number="" targetptr="replication-architecture"><ttl>Replication architecture</ttl><xreftext>the section called “Replication architectureâ€</xreftext></div><div element="section" href="#setting-up-the-master" number="" targetptr="setting-up-the-master"><ttl>Setting up the master</ttl><xreftext>the section called “Setting up the masterâ€</xreftext></div><div element="section" href="#settin-up-a-replica" number="" targetptr="settin-up-a-replica"><ttl>Setting up a replica</ttl><xreftext>the section called “Setting up a replicaâ€</xreftext></div><div element="section" href="#recovering-from-a-degraded-state" number="" targetptr="recovering-from-a-degraded-state"><ttl>Recovering from a degraded state</ttl><xreftext>the section called “Recovering from a degraded stateâ€</xreftext></div></div><div element="chapter" href="#server-administration" number="6" targetptr="server-administration"><ttl>Server administration</ttl><xreftext>Chapter 6, <i>Server administration</i></xreftext><div element="section" href="#signal-handling" number="" targetptr="signal-handling"><ttl>Server signal handling</ttl><xreftext>the section called “Server signal handlingâ€</xreftext></div><div element="section" href="#os-install-notes" number="" targetptr="os-install-notes"><ttl>System-specific administration notes</ttl><xreftext>the section called “System-specific administration notesâ€</xreftext><div element="section" href="#Debian" number="" targetptr="Debian"><ttl>Debian GNU/Linux and Ubuntu</ttl><xreftext>the section called “Debian GNU/Linux and Ubuntuâ€</xreftext></div><div element="section" href="#rpm-based-distros" number="" targetptr="rpm-based-distros"><ttl>Fedora, RHEL, CentOS</ttl><xreftext>the section called “Fedora, RHEL, CentOSâ€</xreftext></div><div element="section" href="#FreeBSD" number="" targetptr="FreeBSD"><ttl>FreeBSD</ttl><xreftext>the section called “FreeBSDâ€</xreftext></div><div element="section" href="#mac-os-x" number="" targetptr="mac-os-x"><ttl>Mac OS X</ttl><xreftext>the section called “Mac OS Xâ€</xreftext></div></div></div><div element="chapter" href="#configuration-reference" number="7" targetptr="configuration-reference"><ttl>Configuration reference</ttl><xreftext>Chapter 7, <i>Configuration reference</i></xreftext><div element="section" href="#command-line-options" number="" targetptr="command-line-options"><ttl>Command line options</ttl><xreftext>the section called “Command line optionsâ€</xreftext><obj element="listitem" href="#help-option" number="" targetptr="help-option"><ttl>???TITLE???</ttl><xreftext/></obj><obj element="listitem" href="#version-option" number="" targetptr="version-option"><ttl>???TITLE???</ttl><xreftext/></obj><obj element="listitem" href="#config-option" number="" targetptr="config-option"><ttl>???TITLE???</ttl><xreftext/></obj><obj element="option" href="#init-storage-option" number="" targetptr="init-storage-option"><ttl>???TITLE???</ttl><xreftext>--init-storage</xreftext></obj></div><div element="section" href="#option-file" number="" targetptr="option-file"><ttl>The option file</ttl><xreftext>option file</xreftext><obj element="table" href="#idp1267792" number="7.1"><ttl>Basic parameters</ttl><xreftext>Table 7.1, “Basic parametersâ€</xreftext></obj><obj element="entry" href="#work_dir" number="" targetptr="work_dir"><ttl>???TITLE???</ttl><xreftext>work_dir</xreftext></obj><obj element="entry" href="#script_dir" number="" targetptr="script_dir"><ttl>???TITLE???</ttl><xreftext>script_dir</xreftext></obj><obj element="entry" href="#wal_dir" number="" targetptr="wal_dir"><ttl>???TITLE???</ttl><xreftext>wal_dir</xreftext></obj><obj element="entry" href="#snap_dir" number="" targetptr="snap_dir"><ttl>???TITLE???</ttl><xreftext>snap_dir</xreftext></obj><obj element="entry" href="#bind_ipaddr" number="" targetptr="bind_ipaddr"><ttl>???TITLE???</ttl><xreftext>bind_ipaddr</xreftext></obj><obj element="entry" href="#primary_port" number="" targetptr="primary_port"><ttl>???TITLE???</ttl><xreftext>primary_port</xreftext></obj><obj element="entry" href="#secondary_port" number="" targetptr="secondary_port"><ttl>???TITLE???</ttl><xreftext>secondary_port</xreftext></obj><obj element="entry" href="#admin_port" number="" targetptr="admin_port"><ttl>???TITLE???</ttl><xreftext>admin_port</xreftext></obj><obj element="entry" href="#custom_proc_title" number="" targetptr="custom_proc_title"><ttl>???TITLE???</ttl><xreftext>custom_proc_title</xreftext></obj><obj element="table" href="#idp1325952" number="7.2"><ttl>Configuring the storage</ttl><xreftext>Table 7.2, “Configuring the storageâ€</xreftext></obj><obj element="anchor" href="#slab_alloc_arena" number="" targetptr="slab_alloc_arena"><ttl>???TITLE???</ttl><xreftext>slab_alloc_arena</xreftext></obj><obj element="para" href="#space" number="" targetptr="space"><ttl>???TITLE???</ttl><xreftext>the section called “The option fileâ€</xreftext></obj><obj element="table" href="#idp1361984" number="7.3"><ttl>Binary logging and snapshots</ttl><xreftext>Table 7.3, “Binary logging and snapshotsâ€</xreftext></obj><obj element="entry" href="#rows_per_wal" number="" targetptr="rows_per_wal"><ttl>???TITLE???</ttl><xreftext>rows_per_wal</xreftext></obj><obj element="entry" href="#wal_mode" number="" targetptr="wal_mode"><ttl>???TITLE???</ttl><xreftext>wal_mode</xreftext></obj><obj element="table" href="#idp1397376" number="7.4"><ttl>Replication</ttl><xreftext>Table 7.4, “Replicationâ€</xreftext></obj><obj element="entry" href="#replication_port" number="" targetptr="replication_port"><ttl>???TITLE???</ttl><xreftext>replication_port</xreftext></obj><obj element="entry" href="#replication_source" number="" targetptr="replication_source"><ttl>???TITLE???</ttl><xreftext>replication_source</xreftext></obj><obj element="table" href="#idp1416416" number="7.5"><ttl>Networking</ttl><xreftext>Table 7.5, “Networkingâ€</xreftext></obj><obj element="table" href="#idp1435744" number="7.6"><ttl>Logging</ttl><xreftext>Table 7.6, “Loggingâ€</xreftext></obj></div></div><div element="chapter" href="#connectors" number="8" targetptr="connectors"><ttl>Connectors</ttl><xreftext>Chapter 8, <i>Connectors</i></xreftext><div element="section" href="#connector-c" number="" targetptr="connector-c"><ttl>C</ttl><xreftext>the section called “Câ€</xreftext></div><div element="section" href="#connector-node.js" number="" targetptr="connector-node.js"><ttl>node.js</ttl><xreftext>the section called “node.jsâ€</xreftext></div><div element="section" href="#connector-perl" number="" targetptr="connector-perl"><ttl>Perl</ttl><xreftext>the section called “Perlâ€</xreftext></div><div element="section" href="#connector-php" number="" targetptr="connector-php"><ttl>PHP</ttl><xreftext>the section called “PHPâ€</xreftext></div><div element="section" href="#connector-python" number="" targetptr="connector-python"><ttl>Python</ttl><xreftext>the section called “Pythonâ€</xreftext></div><div element="section" href="#connector-ruby" number="" targetptr="connector-ruby"><ttl>Ruby</ttl><xreftext>the section called “Rubyâ€</xreftext></div></div><div element="appendix" href="#proctitle" number="A" targetptr="proctitle"><ttl>Server process titles</ttl><xreftext>Appendix A, <i>Server process titles</i></xreftext></div><div element="appendix" href="#errcode" number="B" targetptr="errcode"><ttl>List of error codes</ttl><xreftext>Appendix B, <i>List of error codes</i></xreftext><obj element="term" href="#ER_NONMASTER" number="" targetptr="ER_NONMASTER"><ttl>???TITLE???</ttl><xreftext>ER_NONMASTER</xreftext></obj><obj element="term" href="#ER_ILLEGAL_PARAMS" number="" targetptr="ER_ILLEGAL_PARAMS"><ttl>???TITLE???</ttl><xreftext>ER_ILLEGAL_PARAMS</xreftext></obj><obj element="term" href="#ER_MEMORY_ISSUE" number="" targetptr="ER_MEMORY_ISSUE"><ttl>???TITLE???</ttl><xreftext>ER_MEMORY_ISSUE</xreftext></obj><obj element="term" href="#ER_WAL_IO" number="" targetptr="ER_WAL_IO"><ttl>???TITLE???</ttl><xreftext>ER_WAL_IO</xreftext></obj><obj element="term" href="#ER_INDEX_VIOLATION" number="" targetptr="ER_INDEX_VIOLATION"><ttl>???TITLE???</ttl><xreftext>ER_INDEX_VIOLATION</xreftext></obj><obj element="term" href="#ER_KEY_PART_COUNT" number="" targetptr="ER_KEY_PART_COUNT"><ttl>???TITLE???</ttl><xreftext>ER_KEY_PART_COUNT</xreftext></obj><obj element="term" href="#ER_NO_SUCH_SPACE" number="" targetptr="ER_NO_SUCH_SPACE"><ttl>???TITLE???</ttl><xreftext>ER_NO_SUCH_SPACE</xreftext></obj><obj element="term" href="#ER_NO_SUCH_INDEX" number="" targetptr="ER_NO_SUCH_INDEX"><ttl>???TITLE???</ttl><xreftext>ER_NO_SUCH_INDEX</xreftext></obj><obj element="term" href="#ER_PROC_LUA" number="" targetptr="ER_PROC_LUA"><ttl>???TITLE???</ttl><xreftext>ER_PROC_LUA</xreftext></obj><obj element="term" href="#ER_FIBER_STACK" number="" targetptr="ER_FIBER_STACK"><ttl>???TITLE???</ttl><xreftext>ER_FIBER_STACK</xreftext></obj><obj element="term" href="#ER_UPDATE_FIELD" number="" targetptr="ER_UPDATE_FIELD"><ttl>???TITLE???</ttl><xreftext>ER_UPDATE_FIELD</xreftext></obj></div></div> -- GitLab