From ee57c04c74deeb8c381a625fb4176995ef355923 Mon Sep 17 00:00:00 2001 From: Konstantin Osipov <kostja.osipov@gmail.com> Date: Fri, 3 Jun 2011 18:32:26 +0400 Subject: [PATCH] User guide: add more information on memcached protocol. Document memcached options. Tweak doc/sql.txt. --- doc/sql.txt | 7 ++-- doc/user/configuration-reference.xml | 57 ++++++++++++++++++++++------ doc/user/language-reference.xml | 51 +++++++++++++++++-------- doc/user/target.db | 2 +- 4 files changed, 86 insertions(+), 31 deletions(-) diff --git a/doc/sql.txt b/doc/sql.txt index 37ddcc9b60..9cbbd9a7de 100644 --- a/doc/sql.txt +++ b/doc/sql.txt @@ -4,9 +4,10 @@ ; the standard SQL, to which all clients are strongly encouraged ; to stick. ; -; Convention: Uppercase letters are used for terminals and literals, -; which should be typed in intact. Lowercase letters are used -; for <non-terminals>. +; Convention: UPPERCASE letters are used for terminals and literals. +; Lowercase letters are used for <non-terminals>. SQL is +; case-insensitive, so this convention is present only to imporve +; legibility of the BNF. <sql> ::= <insert> | <update> | <delete> | <select> diff --git a/doc/user/configuration-reference.xml b/doc/user/configuration-reference.xml index 17de362371..1263a66111 100644 --- a/doc/user/configuration-reference.xml +++ b/doc/user/configuration-reference.xml @@ -777,19 +777,27 @@ tarantool: box:primary@sessions pri:33013 sec:33014 adm:33015</programlisting> <tbody> <row> - <entry>memcached</entry> + <entry>memcached_port</entry> <entry>integer</entry> <entry>0</entry> <entry>no</entry> <entry>no</entry> - <entry>Turn on Memcached mode. In this mode, Tarantool - does not use secondary_port, and speaks memcached - protocol on the primary port. In particular, - memcached-style flags are supported, and expiration - time can be set on tuples. Unlike Memcached, all data - still goes to the binary log and to the replica, if - latter one is set up, which means that power outage - does not lead to a loss of all data. + <entry> + <anchor xml:id="memcached_port" xreflabel="memcached_port"/> + + Turn on Memcached protocol support on the given + port. All requests on this port are directed to + a dedicated namespace, set in <olink + targetptr="memcached_namespace"/>. + Memcached-style flags are supported and stored + along with the value. The expiration time can also be + set and is persistent, but is ignored, unless <olink + targetptr="memcached_expire"/> is turned on. + Unlike Memcached, all data still goes to the binary + log and to the replica, if latter one is set up, which + means that power outage does not lead to loss of all + data. Thanks to data persistence, cache warm up time + is also very short. </entry> </row> @@ -799,9 +807,34 @@ tarantool: box:primary@sessions pri:33013 sec:33014 adm:33015</programlisting> <entry>23</entry> <entry>no</entry> <entry>no</entry> - <entry>Namespace id to store memcached data in. The - format of tuple is [key, metadata, value], with a hash - index based on the key. </entry> + <entry> + <anchor xml:id="memcached_namespace" + xreflabel="memcached_namespace"/> + Namespace id to store memcached data in. The + format of tuple is [key, metadata, value], with a HASH + index based on the key. Since the namespace format + is defined by Memcached data model, it must not be + previously configured.</entry> + </row> + + <row> + <entry>memcached_expire</entry> + <entry>boolean</entry> + <entry>0</entry> + <entry>no</entry> + <entry>no</entry> + <entry> + <anchor xml:id="memcached_expire" + xreflabel="memcached_expire"/> + Turn on tuple time-to-live support in + <olink targetptr="memcached_namespace"/>. This + effectively turns Tarantool into a "persistent" implementation + of Memcached. Since a caching server has + significantly different purpose than a data server, in + this mode Tarantool turns off replication and does not + bind to <olink targetptr="primary_port"/> or <olink + targetptr="secondary_port"/>. + </entry> </row> <row> diff --git a/doc/user/language-reference.xml b/doc/user/language-reference.xml index 95ab30c1d2..479eb39c07 100644 --- a/doc/user/language-reference.xml +++ b/doc/user/language-reference.xml @@ -16,11 +16,12 @@ Unlike many other key/value servers, Tarantool uses different TCP ports and client/server protocols for data manipulation and administrative statements. - On start up, the server connects to four TCP ports: + On start up, the server can connect to up to five TCP ports: <itemizedlist> <listitem><para> Read/write data port, to handle INSERTs, UPDATEs, - DELETEs and SELECTs. + DELETEs and SELECTs. This port speaks the native + Tarantool protocol, and provides full access to the server. </para> <para> The default value of the port is <literal>33013</literal>, @@ -40,18 +41,21 @@ <listitem><para>Replication port (see <olink targetptr="replication_port"/>), by default set to <literal>33016</literal>, used to send updates to - replicas. Replication is optional, and if its port is not + replicas. Replication is optional, and if this port is not set in the option file, the corresponding server process is not started. </para></listitem> + <listitem><para>Memcached port. Optional, read-write data port + that speaks Memcached protocol. This port is off by default. + </para></listitem> </itemizedlist> In absence of authentication, this approach allows system administrators to restrict access to read/write or administrative ports. The client, however, has to be aware of the separation, and <command>tarantool</command> command line - client will automatically selects the correct port for you + client automatically selects the correct port for you with help of a simple regular expression. SELECTs, UPDATEs, - INSERTs and DELETEs are sent to the primary port, whereas SHOWs, + INSERTs and DELETEs are sent to the primary port, whereas SHOW, RELOAD, SAVE and others -- to the administrative port. </para> @@ -77,7 +81,7 @@ an index id and key value are always present in these requests. SELECTs and UPDATEs can use secondary keys. UPDATE only needs to list the fields that are actually changed. With this one - exception, all commands operate on the whole tuple(s). + exception, all commands operate on whole tuple(s). </para> <para>Unless implementing a client driver, one needn't concern him or her self with the complications of the binary @@ -90,10 +94,25 @@ form in the source tree: please see <link xlink:href="https://github.com/mailru/tarantool/blob/master/doc/box-protocol.txt"><filename>doc/box-protocol.txt</filename></link> and - <link xlink:href="https://github.com/mailru/tarantool/blob/master/doc/box-protocol.txt"><filename>doc/sql.txt</filename></link> respectively. + <link xlink:href="https://github.com/mailru/tarantool/blob/master/doc/sql.txt"><filename>doc/sql.txt</filename></link> respectively. + </para> + <section> + <title>Memcached protocol</title> + <para>If full access to Tarantool functionality is not needed, + or there is no readily available connector for the + programming language in use, any existing client driver for + Memcached will make do as a Tarantool connector. + To enable Memcached protocol, turn on + <olink targetptr="memcached_port"/> in the option file. + Since Memcached has no notion of namespaces or secondary + indexes, this port only makes it possible to access one + dedicated namespace (see <olink + targetptr="memcached_namespace"/>) via its primary key. + Unless tuple expiration is enabled with <olink + targetptr="memcached_expire"/>, TTL part of the message is + stored but ignored. </para> - <para>The other easy alternative is to access Tarantool using - Memcached protocol. </para> + </section> </section> <section> @@ -112,12 +131,13 @@ 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, Tarantool SQL-capable - command line client understands all administrative statements + desired. Additionally, <command>tarantool</command>, the + SQL-capable command line client, + understands all administrative statements and automatically directs them to the administrative port. - The server response to an administrative command even though - is always in plain text, can be quite complex, - and is encoded with YAML markup to simplify automated parsing. + The server response to an administrative command, even though + is always in plain text, can be quite complex. + It is encoded using YAML markup to simplify automated parsing. </para> <para>To learn about all supported administrative commands, you can type <emphasis role="tntadmin">help</emphasis> in the @@ -136,7 +156,8 @@ role="tntadmin">save snaspshot</emphasis> Take a snapshot of all data and store it in <filename><olink targetptr="snap_dir"/>/<latest-lsn>.snap</filename>. - To take a snapshot, Tarantool forks and quickly munmap(2)s all + To take a snapshot, Tarantool forks and quickly + <function>munmap(2)</function>s all memory except one that stores tuples. Since all modern operating systems support virtual memory copy-on-write, this effectively creates a consistent snapshot of all tuples in the child diff --git a/doc/user/target.db b/doc/user/target.db index 5e50818005..2a03a467ab 100644 --- a/doc/user/target.db +++ b/doc/user/target.db @@ -1 +1 @@ -<div element="book" href="#tarantool-user-guide" number="" targetptr="tarantool-user-guide"><ttl>Tarantool/Box User Guide, version 1.4.1-32-g189b126</ttl><xreftext>Tarantool/Box User Guide, version 1.4.1-32-g189b126</xreftext><div element="chapter" href="#id402127" number="1"><ttl>Preface</ttl><xreftext>Chapter 1, <i>Preface</i></xreftext><div element="section" href="#preface" number="" targetptr="preface"><ttl>Tarantool/Box: an overview</ttl><xreftext>the section called “Tarantool/Box: an overviewâ€</xreftext></div><div element="section" href="#id402170" number=""><ttl>Conventions</ttl><xreftext>the section called “Conventionsâ€</xreftext></div><div element="section" href="#id402244" number=""><ttl>Reporting bugs</ttl><xreftext>the section called “Reporting bugsâ€</xreftext></div></div><div element="chapter" href="#id403369" number="2"><ttl>Getting started</ttl><xreftext>Chapter 2, <i>Getting started</i></xreftext></div><div element="chapter" href="#id404402" number="3"><ttl>Dynamic data model</ttl><xreftext>Chapter 3, <i>Dynamic data model</i></xreftext></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="#id402550" number=""><ttl>Data manipulation</ttl><xreftext>the section called “Data manipulationâ€</xreftext></div><div element="section" href="#id402606" number=""><ttl>Writing stored procedures in Lua</ttl><xreftext>the section called “Writing stored procedures in Luaâ€</xreftext></div><div element="section" href="#id402616" number=""><ttl>Administrative console</ttl><xreftext>the section called “Administrative consoleâ€</xreftext><obj element="emphasis" href="#reload-configuration" number="" targetptr="reload-configuration"><ttl>???TITLE???</ttl><xreftext>RELOAD CONFIGURATION</xreftext></obj><obj element="emphasis" href="#show-configuration" number="" targetptr="show-configuration"><ttl>???TITLE???</ttl><xreftext>SHOW CONFIGURATION</xreftext></obj><obj element="emphasis" href="#save-snapshot" number="" targetptr="save-snapshot"><ttl>???TITLE???</ttl><xreftext>SAVE SNAPSHOT</xreftext></obj></div></div><div element="chapter" href="#replication" number="5" targetptr="replication"><ttl>Replication</ttl><xreftext>Chapter 5, <i>Replication</i></xreftext></div><div element="chapter" href="#configuration-reference" number="6" targetptr="configuration-reference"><ttl>Configuration reference</ttl><xreftext>Chapter 6, <i>Configuration reference</i></xreftext><div element="section" href="#id404261" number=""><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></div><div element="section" href="#option-file" number="" targetptr="option-file"><ttl>The option file</ttl><xreftext>option file</xreftext><obj element="table" href="#id407246" number="6.1"><ttl>Basic parameters</ttl><xreftext>Table 6.1, “Basic parametersâ€</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="#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="table" href="#id407640" number="6.2"><ttl>Configuring the storage</ttl><xreftext>Table 6.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="#namespace" number="" targetptr="namespace"><ttl>???TITLE???</ttl><xreftext>the section called “The option fileâ€</xreftext></obj><obj element="table" href="#id407932" number="6.3"><ttl>Binary logging and snapshots</ttl><xreftext>Table 6.3, “Binary logging and snapshotsâ€</xreftext></obj><obj element="table" href="#id408194" number="6.4"><ttl>Replication</ttl><xreftext>Table 6.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_port" number="" targetptr="replication_source_port"><ttl>???TITLE???</ttl><xreftext>replication_source_port</xreftext></obj><obj element="table" href="#id408382" number="6.5"><ttl>Networking</ttl><xreftext>Table 6.5, “Networkingâ€</xreftext></obj><obj element="table" href="#id408538" number="6.6"><ttl>Logging</ttl><xreftext>Table 6.6, “Loggingâ€</xreftext></obj><obj element="table" href="#id408746" number="6.7"><ttl>Memcached protocol support</ttl><xreftext>Table 6.7, “Memcached protocol supportâ€</xreftext></obj></div></div><div element="chapter" href="#connectors" number="7" targetptr="connectors"><ttl>Connectors</ttl><xreftext>Chapter 7, <i>Connectors</i></xreftext><div element="section" href="#id402820" number=""><ttl>C</ttl><xreftext>the section called “Câ€</xreftext></div><div element="section" href="#id404440" number=""><ttl>Perl</ttl><xreftext>the section called “Perlâ€</xreftext></div><div element="section" href="#id404451" number=""><ttl>PHP</ttl><xreftext>the section called “PHPâ€</xreftext></div><div element="section" href="#id405761" number=""><ttl>Python</ttl><xreftext>the section called “Pythonâ€</xreftext></div><div element="section" href="#id405772" number=""><ttl>Ruby</ttl><xreftext>the section called “Rubyâ€</xreftext></div></div><div element="appendix" href="#errcode" number="A" targetptr="errcode"><ttl>List of error codes</ttl><xreftext>Appendix A, <i>List of error codes</i></xreftext><obj element="term" href="#ERR_CODE_NONMASTER" number="" targetptr="ERR_CODE_NONMASTER"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_NONMASTER</xreftext></obj><obj element="term" href="#ERR_CODE_ILLEGAL_PARAMS" number="" targetptr="ERR_CODE_ILLEGAL_PARAMS"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_ILLEGAL_PARAMS</xreftext></obj><obj element="term" href="#ERR_CODE_NODE_IS_RO" number="" targetptr="ERR_CODE_NODE_IS_RO"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_NODE_IS_RO</xreftext></obj><obj element="term" href="#ERR_CODE_MEMORY_ISSUE" number="" targetptr="ERR_CODE_MEMORY_ISSUE"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_MEMORY_ISSUE</xreftext></obj><obj element="term" href="#ERR_CODE_WAL_IO" number="" targetptr="ERR_CODE_WAL_IO"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_WAL_IO</xreftext></obj><obj element="term" href="#ERR_CODE_INDEX_VIOLATION" number="" targetptr="ERR_CODE_INDEX_VIOLATION"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_INDEX_VIOLATION</xreftext></obj><obj element="term" href="#ERR_CODE_NO_SUCH_NAMESPACE" number="" targetptr="ERR_CODE_NO_SUCH_NAMESPACE"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_NO_SUCH_NAMESPACE</xreftext></obj><obj element="term" href="#ERR_CODE_NO_SUCH_INDEX" number="" targetptr="ERR_CODE_NO_SUCH_INDEX"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_NO_SUCH_INDEX</xreftext></obj></div></div> +<div element="book" href="#tarantool-user-guide" number="" targetptr="tarantool-user-guide"><ttl>Tarantool/Box User Guide, version 1.4.1-32-g189b126</ttl><xreftext>Tarantool/Box User Guide, version 1.4.1-32-g189b126</xreftext><div element="chapter" href="#id496745" number="1"><ttl>Preface</ttl><xreftext>Chapter 1, <i>Preface</i></xreftext><div element="section" href="#preface" number="" targetptr="preface"><ttl>Tarantool/Box: an overview</ttl><xreftext>the section called “Tarantool/Box: an overviewâ€</xreftext></div><div element="section" href="#id496788" number=""><ttl>Conventions</ttl><xreftext>the section called “Conventionsâ€</xreftext></div><div element="section" href="#id496862" number=""><ttl>Reporting bugs</ttl><xreftext>the section called “Reporting bugsâ€</xreftext></div></div><div element="chapter" href="#id497986" number="2"><ttl>Getting started</ttl><xreftext>Chapter 2, <i>Getting started</i></xreftext></div><div element="chapter" href="#id499020" number="3"><ttl>Dynamic data model</ttl><xreftext>Chapter 3, <i>Dynamic data model</i></xreftext></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="#id498712" number=""><ttl>Data manipulation</ttl><xreftext>the section called “Data manipulationâ€</xreftext><div element="section" href="#id499660" number=""><ttl>Memcached protocol</ttl><xreftext>the section called “Memcached protocolâ€</xreftext></div></div><div element="section" href="#id499689" number=""><ttl>Writing stored procedures in Lua</ttl><xreftext>the section called “Writing stored procedures in Luaâ€</xreftext></div><div element="section" href="#id499700" number=""><ttl>Administrative console</ttl><xreftext>the section called “Administrative consoleâ€</xreftext><obj element="emphasis" href="#reload-configuration" number="" targetptr="reload-configuration"><ttl>???TITLE???</ttl><xreftext>RELOAD CONFIGURATION</xreftext></obj><obj element="emphasis" href="#show-configuration" number="" targetptr="show-configuration"><ttl>???TITLE???</ttl><xreftext>SHOW CONFIGURATION</xreftext></obj><obj element="emphasis" href="#save-snapshot" number="" targetptr="save-snapshot"><ttl>???TITLE???</ttl><xreftext>SAVE SNAPSHOT</xreftext></obj></div></div><div element="chapter" href="#replication" number="5" targetptr="replication"><ttl>Replication</ttl><xreftext>Chapter 5, <i>Replication</i></xreftext></div><div element="chapter" href="#configuration-reference" number="6" targetptr="configuration-reference"><ttl>Configuration reference</ttl><xreftext>Chapter 6, <i>Configuration reference</i></xreftext><div element="section" href="#id498879" number=""><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></div><div element="section" href="#option-file" number="" targetptr="option-file"><ttl>The option file</ttl><xreftext>option file</xreftext><obj element="table" href="#id501977" number="6.1"><ttl>Basic parameters</ttl><xreftext>Table 6.1, “Basic parametersâ€</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="#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="table" href="#id502371" number="6.2"><ttl>Configuring the storage</ttl><xreftext>Table 6.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="#namespace" number="" targetptr="namespace"><ttl>???TITLE???</ttl><xreftext>the section called “The option fileâ€</xreftext></obj><obj element="table" href="#id502662" number="6.3"><ttl>Binary logging and snapshots</ttl><xreftext>Table 6.3, “Binary logging and snapshotsâ€</xreftext></obj><obj element="table" href="#id502924" number="6.4"><ttl>Replication</ttl><xreftext>Table 6.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_port" number="" targetptr="replication_source_port"><ttl>???TITLE???</ttl><xreftext>replication_source_port</xreftext></obj><obj element="table" href="#id503112" number="6.5"><ttl>Networking</ttl><xreftext>Table 6.5, “Networkingâ€</xreftext></obj><obj element="table" href="#id503268" number="6.6"><ttl>Logging</ttl><xreftext>Table 6.6, “Loggingâ€</xreftext></obj><obj element="table" href="#id503476" number="6.7"><ttl>Memcached protocol support</ttl><xreftext>Table 6.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_namespace" number="" targetptr="memcached_namespace"><ttl>???TITLE???</ttl><xreftext>memcached_namespace</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="7" targetptr="connectors"><ttl>Connectors</ttl><xreftext>Chapter 7, <i>Connectors</i></xreftext><div element="section" href="#id501802" number=""><ttl>C</ttl><xreftext>the section called “Câ€</xreftext></div><div element="section" href="#id500225" number=""><ttl>Perl</ttl><xreftext>the section called “Perlâ€</xreftext></div><div element="section" href="#id500236" number=""><ttl>PHP</ttl><xreftext>the section called “PHPâ€</xreftext></div><div element="section" href="#id497412" number=""><ttl>Python</ttl><xreftext>the section called “Pythonâ€</xreftext></div><div element="section" href="#id497423" number=""><ttl>Ruby</ttl><xreftext>the section called “Rubyâ€</xreftext></div></div><div element="appendix" href="#errcode" number="A" targetptr="errcode"><ttl>List of error codes</ttl><xreftext>Appendix A, <i>List of error codes</i></xreftext><obj element="term" href="#ERR_CODE_NONMASTER" number="" targetptr="ERR_CODE_NONMASTER"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_NONMASTER</xreftext></obj><obj element="term" href="#ERR_CODE_ILLEGAL_PARAMS" number="" targetptr="ERR_CODE_ILLEGAL_PARAMS"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_ILLEGAL_PARAMS</xreftext></obj><obj element="term" href="#ERR_CODE_NODE_IS_RO" number="" targetptr="ERR_CODE_NODE_IS_RO"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_NODE_IS_RO</xreftext></obj><obj element="term" href="#ERR_CODE_MEMORY_ISSUE" number="" targetptr="ERR_CODE_MEMORY_ISSUE"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_MEMORY_ISSUE</xreftext></obj><obj element="term" href="#ERR_CODE_WAL_IO" number="" targetptr="ERR_CODE_WAL_IO"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_WAL_IO</xreftext></obj><obj element="term" href="#ERR_CODE_INDEX_VIOLATION" number="" targetptr="ERR_CODE_INDEX_VIOLATION"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_INDEX_VIOLATION</xreftext></obj><obj element="term" href="#ERR_CODE_NO_SUCH_NAMESPACE" number="" targetptr="ERR_CODE_NO_SUCH_NAMESPACE"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_NO_SUCH_NAMESPACE</xreftext></obj><obj element="term" href="#ERR_CODE_NO_SUCH_INDEX" number="" targetptr="ERR_CODE_NO_SUCH_INDEX"><ttl>???TITLE???</ttl><xreftext>ERR_CODE_NO_SUCH_INDEX</xreftext></obj></div></div> -- GitLab