diff --git a/README.md b/README.md index 7d3e04898c222defd050ef052b9ab8b68fab783e..8166e6faa3e496d4fe4cc6177488991496cb1e04 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@ Key features of the system: * Lua functions, procedures, triggers, with rich access to database API, JSON support, inter-procedure and network communication libraries - * a command line client supporting simple SQL, - a native Lua console and Memcached text protocol. + * a command line client supporting simple SQL and + a native Lua console Tarantool is ideal for data-enriched components of scalable Web architecture: traditional database caches, queue diff --git a/doc/user/configuration-reference.xml b/doc/user/configuration-reference.xml index 7c73535e907cc0223e604a1be4a2982450376ccb..06a3533e500ff17ea4893508aaf2b206e1df5a19 100644 --- a/doc/user/configuration-reference.xml +++ b/doc/user/configuration-reference.xml @@ -777,114 +777,6 @@ tarantool_box: primary@sessions pri:33013 sec:33014 adm:33015</programlisting> </tgroup> </table> - <table frame='all' pgwide='1'> - <title>Memcached protocol support</title> - <tgroup cols='6' colsep='1' rowsep='1'> - <colspec colnum="1" colname="col1" colwidth="2*"/> - <colspec colnum="6" colname="col4" colwidth="6*"/> - - <thead> - <row> - <entry>Name</entry> - <entry>Type</entry> - <entry>Default</entry> - <entry>Required?</entry> - <entry>Dynamic?</entry> - <entry>Description</entry> - </row> - </thead> - - <tbody> - - <row> - <entry>memcached_port</entry> - <entry>integer</entry> - <entry>none</entry> - <entry>no</entry> - <entry>no</entry> - <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 space, set in <olink - targetptr="memcached_space"/>. - 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> - - <row> - <entry>memcached_space</entry> - <entry>integer</entry> - <entry>23</entry> - <entry>no</entry> - <entry>no</entry> - <entry> - <anchor xml:id="memcached_space" - xreflabel="memcached_space"/> - Space id to store memcached data in. The - format of tuple is [key, metadata, value], with a HASH - index based on the key. Since the space format - is defined by Memcached data model, it must not be - previously configured.</entry> - </row> - - <row> - <entry>memcached_expire</entry> - <entry>boolean</entry> - <entry>false</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_space"/>. This - effectively turns Tarantool into a persistent, - replicated and scriptable implementation of Memcached. - </entry> - </row> - - <row> - <entry>memcached_expire_per_loop</entry> - <entry>integer</entry> - <entry>1024</entry> - <entry>no</entry> - <entry><emphasis role="strong">yes</emphasis></entry> - <entry>How many records to consider per iteration of the - expiration loop. Tuple expiration is performed in a separate - <quote>green</quote> thread within our cooperative multitasking - framework and this setting effectively limits how long - the expiration loop stays on CPU uninterrupted. - </entry> - </row> - - <row> - <entry>memcached_expire_full_sweep</entry> - <entry>float</entry> - <entry>3600</entry> - <entry>no</entry> - <entry><emphasis role="strong">yes</emphasis></entry> - <entry>Try to make sure that every tuple is considered - for expiration within this time frame (in seconds). - Together with memcached_expire_per_loop this defines - how often the expiration <quote>green</quote> thread - is scheduled on CPU. - </entry> - </row> - - </tbody> - </tgroup> - </table> - </section> </chapter> diff --git a/doc/user/connectors.xml b/doc/user/connectors.xml index 5466f2d9ac2913a28eb15f8497a68d051125f63a..5ed2d5c1352926803437504ca950dabf37fcde3f 100644 --- a/doc/user/connectors.xml +++ b/doc/user/connectors.xml @@ -11,8 +11,6 @@ This chapter documents APIs for various programming languages. </para></blockquote> -<para>Apart from the native Tarantool client driver, you can always use a <emphasis role="strong">Memcached</emphasis> driver of your choice, after enabling Memcached protocol in the configuration file.</para> - <section xml:id="connector-c"> <title>C</title> <para> diff --git a/doc/user/errcode.xml b/doc/user/errcode.xml index 3a772f9edf307188df36c8cd124630e9a065c26a..03a68e5292b9e83c43a2e11bf5cd00cad76b939d 100644 --- a/doc/user/errcode.xml +++ b/doc/user/errcode.xml @@ -8,9 +8,8 @@ which is normally more descriptive than error code, is not present in server response. The actual message may contain a file name, a detailed reason or operating system error code. -All such messages, however, are logged in the error log. When -using <emphasis role="strong">Memcached</emphasis> protocol, the error message is sent to the -client along with the code. Below follow only general descriptions +All such messages, however, are logged in the error log. +Below follow only general descriptions of some popular codes. A complete list of errors can be found in file <filename xlink:href="https://github.com/tarantool/tarantool/blob/master/include/errcode.h">errcode.h</filename> in the source tree. @@ -85,6 +84,12 @@ file <filename xlink:href="https://github.com/tarantool/tarantool/blob/master/in </para></listitem> </varlistentry> + <varlistentry> + <term xml:id="ER_UPDATE_FIELD" xreflabel="ER_UPDATE_FIELD">ER_UPDATE_FIELD</term> + <listitem><para>A error occured during update of a field. + </para></listitem> + </varlistentry> + </variablelist> </appendix> diff --git a/doc/user/language-reference.xml b/doc/user/language-reference.xml index a85b8f15bf24998d43219ecb5c8ecd0ed4f2dc5e..02782b180f6749c6ae94751a11ca7d76dc84d0a1 100644 --- a/doc/user/language-reference.xml +++ b/doc/user/language-reference.xml @@ -17,7 +17,7 @@ Unlike many other key/value servers, Tarantool uses different TCP ports and client/server protocols for data manipulation and administrative statements. - During start up, the server can connect to up to five TCP ports: + During start up, the server can connect to up to four TCP ports: <itemizedlist> <listitem><para> Read/write data port, to handle INSERTs, UPDATEs, @@ -46,9 +46,6 @@ 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 text 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 @@ -121,35 +118,6 @@ and <link xlink:href="https://github.com/tarantool/tarantool/blob/master/doc/sql.txt"><filename>doc/sql.txt</filename></link> respectively. </para> - <section xml:id="memcached-protocol"> - <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 text Memcached protocol, turn on - <olink targetptr="memcached_port"/> in the option file. - Since Memcached has no notion of spaces or secondary - indexes, this port only makes it possible to access one - dedicated space (see <olink - targetptr="memcached_space"/>) 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> - Notice, that <olink targetptr="memcached_space"/> is also - accessible using the primary port or Lua. A common use - of the Memcached port in Tarantool is when a Memcached default - expiration algorithm is insufficient, and a custom Lua - expiration procedure is used. - </para> - <para> - Tarantool does not support the binary protocol of Memcached. - If top performance is a must, Tarantool's own binary - protocol should be used. - </para> - </section> </section> <section xml:id="administrative-console"> diff --git a/doc/user/proctitle.xml b/doc/user/proctitle.xml index 23be03ca579c40af3de1405af5036f46f19011af..dc26fffba0b4708ad02bbac77eb67312fbc85448 100644 --- a/doc/user/proctitle.xml +++ b/doc/user/proctitle.xml @@ -48,9 +48,8 @@ </itemizedlist> Possible port names are: <quote>pri</quote> for <olink targetptr="primary_port"/>, <quote>sec</quote> for <olink - targetptr="secondary_port"/>, <quote>adm</quote> for <olink - targetptr="admin_port"/> and <quote>memcached</quote> for <olink - targetptr="memcached_port"/>. + targetptr="secondary_port"/> and <quote>adm</quote> for <olink + targetptr="admin_port"/>. </para> <para> For example: diff --git a/doc/user/stored-procedures.xml b/doc/user/stored-procedures.xml index 608d242c19bfc25830c5f65b75a32ec8cd8b66b6..a756ca3f60dbb24fd1994796f0c7b6e350881398 100644 --- a/doc/user/stored-procedures.xml +++ b/doc/user/stored-procedures.xml @@ -493,8 +493,8 @@ localhost> lua box.select(5, 1, 'firstname', 'lastname') <member><code>:p</code> — splice a field: start at offset, cut length bytes, and add a string.</member> - <member><code>#p</code> — delete a - field.</member> + <member><code>#p</code> — delete specified + number of fields.</member> <member><code>!p</code> — insert a field (before the one specified).</member> </simplelist> @@ -529,6 +529,14 @@ localhost> lua box.update(0, 2, '#p', 2, 1) --- - 2: {'Bienvenue tout le monde!'} ... +localhost> lua 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) +--- + - 3: {'crocodile', 'giraffe', 'hippopotamus', 'rhino'} +... </programlisting> </para> </listitem> diff --git a/include/errcode.h b/include/errcode.h index 1af5bca5719130b24efa637be64092cd65b9cc67..a62b5df6ae64f3ea38f3308ace5e1c53015e6816 100644 --- a/include/errcode.h +++ b/include/errcode.h @@ -108,7 +108,7 @@ enum { TNT_ERRMSG_MAX = 512 }; /* 53 */_(ER_NO_SUCH_INDEX, 2, "No index #%u is defined in space %u") \ /* 54 */_(ER_NO_SUCH_FIELD, 2, "Field %u was not found in the tuple") \ /* 55 */_(ER_TUPLE_FOUND, 2, "Duplicate key exists in unique index %u") \ - /* 56 */_(ER_UNUSED, 2, "") \ + /* 56 */_(ER_UPDATE_FIELD, 2, "Field %u UPDATE error: %s") \ /* 57 */_(ER_NO_SUCH_SPACE, 2, "Space %u does not exist") diff --git a/src/box/tuple_update.cc b/src/box/tuple_update.cc index ae6bc51d3d0b9b7015016b72f55faa3db1fb4439..86d9740dd5a5abf33cb4059d079a2c941566f498 100644 --- a/src/box/tuple_update.cc +++ b/src/box/tuple_update.cc @@ -322,7 +322,27 @@ static void init_update_op_delete(struct tuple_update *update, struct update_op *op) { op_adjust_field_no(op, rope_size(update->rope) - 1); - rope_erase(update->rope, op->field_no); + + uint32_t delete_count = 1; + if (op->arg.set.length > 0) { + /* Check the operand type, if present. */ + if (op->arg.set.length != sizeof(int32_t)) + tnt_raise(ClientError, ER_ARG_TYPE, + op->field_no, "NUM"); + + delete_count = *(int32_t *)op->arg.set.value; + if (delete_count == UINT32_MAX) + delete_count = rope_size(update->rope) - op->field_no; + else if (op->field_no + delete_count > rope_size(update->rope)) + delete_count = rope_size(update->rope) - op->field_no; + + if (delete_count == 0) + tnt_raise(ClientError, ER_UPDATE_FIELD, + op->field_no, "cannot delete 0 fields"); + } + + for (uint32_t u = 0; u < delete_count; u++) + rope_erase(update->rope, op->field_no); } static void @@ -524,10 +544,6 @@ update_calc_new_tuple_length(struct tuple_update *update) } update->new_tuple_fcount = rope_size(update->rope); - - if (update->new_tuple_size > UINT32_MAX) - tnt_raise(ClientError, ER_TUPLE_IS_TOO_LONG, - update->new_tuple_size); } static void diff --git a/test/box/lua.result b/test/box/lua.result index 1fe81ec1147bc29cf2766d7a9f61af5a207c0d66..964f54eab7d3b0bf100868a312022f777fd48030 100644 --- a/test/box/lua.result +++ b/test/box/lua.result @@ -1224,6 +1224,42 @@ box.update(0, 'tes5', '#p', 0, '') box.space[0]:truncate() --- ... +box.insert(0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15) +--- +- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] +... +box.update(0, 0, '#p', 42, 1) +--- +- error: Field 42 was not found in the tuple +... +box.update(0, 0, '#p', 3, 'abirvalg') +--- +- error: 'Argument type in operation on field 3 does not match field type: expected + a NUM' +... +box.update(0, 0, '#p#p#p', 1, 1, 3, 2, 5, 1) +--- +- [0, 2, 3, 6, 7, 9, 10, 11, 12, 13, 14, 15] +... +box.update(0, 0, '#p', 3, 3) +--- +- [0, 2, 3, 10, 11, 12, 13, 14, 15] +... +box.update(0, 0, '#p', 4, 123456) +--- +- [0, 2, 3, 10] +... +box.update(0, 0, '#p', 2, 4294967295) +--- +- [0, 2] +... +box.update(0, 0, '#p', 1, 0) +--- +- error: 'Field 1 UPDATE error: cannot delete 0 fields' +... +box.space[0]:truncate() +--- +... # test box.update: INSERT field diff --git a/test/box/lua.test.py b/test/box/lua.test.py index 6bece921453f04eabc68e61e56b52a0c557d3afd..21d2deda0e70ef4848975c29d24296ed9af5324c 100644 --- a/test/box/lua.test.py +++ b/test/box/lua.test.py @@ -398,6 +398,17 @@ sql("call box.update('0', 'tes4', '#p', 0, '')") admin("box.update(0, 'tes5', '#p', 0, '')") admin("box.space[0]:truncate()") +# test delete multiple fields +admin("box.insert(0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)") +admin("box.update(0, 0, '#p', 42, 1)") +admin("box.update(0, 0, '#p', 3, 'abirvalg')") +admin("box.update(0, 0, '#p#p#p', 1, 1, 3, 2, 5, 1)") +admin("box.update(0, 0, '#p', 3, 3)") +admin("box.update(0, 0, '#p', 4, 123456)") +admin("box.update(0, 0, '#p', 2, 4294967295)") +admin("box.update(0, 0, '#p', 1, 0)") +admin("box.space[0]:truncate()") + print """ # test box.update: INSERT field """ diff --git a/test/box/lua_misc.result b/test/box/lua_misc.result index c731595c6d44bffbe73a513fdfd04123be3c2e2a..a4cbf5703075b4339b8127be8bc952ea304d3399 100644 --- a/test/box/lua_misc.result +++ b/test/box/lua_misc.result @@ -153,6 +153,7 @@ t; - 'box.error.ER_MODIFY_INDEX : 6914' - 'box.error.ER_EXACT_MATCH : 11522' - 'box.error.ER_SECONDARY : 770' + - 'box.error.ER_UPDATE_FIELD : 14338' - 'box.error.ER_DROP_SPACE : 6146' - 'box.error.ER_UNKNOWN_UPDATE_OP : 11266' - 'box.error.ER_UNSUPPORTED : 2562' diff --git a/third_party/memcached/COPYING b/third_party/memcached/COPYING deleted file mode 100644 index 4746b00c326b9a010ffe0265d4facd1c1d6ee644..0000000000000000000000000000000000000000 --- a/third_party/memcached/COPYING +++ /dev/null @@ -1,30 +0,0 @@ -Copyright (c) 2003, Danga Interactive, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - - * Neither the name of the Danga Interactive nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/third_party/memcached/doc/CONTRIBUTORS b/third_party/memcached/doc/CONTRIBUTORS deleted file mode 100644 index b87e5c604a28db3c3e5a0c2997f7ceb463698d5e..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/CONTRIBUTORS +++ /dev/null @@ -1,45 +0,0 @@ -MEMCACHED CONTRIBUTORS - -This file contains a list of people who have contributed code and -effort to the memcached project. If you don't see your name mentioned -send email to the memcached mailing list so you can be immortalized. - -Also see the ChangeLog for even more people who have helped over the -years by submitting fixes, patches and reporting bugs. - - -Major authors: --------------- - -Brad Fitzpatrick <brad@danga.com> -- maintainer, original implementations - -Anatoly Vorobey <mellon@pobox.com> -- lots of the modern server code - -Steven Grimm <sgrimm@facebook.com> -- iov writing (less CPU), UDP mode, - non-2.0 slab mantissas, multithread, ... - -Other Contributors ------------------- - -Evan Martin <evan@danga.com> -Nathan Neulinger <nneul@umr.edu> -Eric Hodel <drbrain@segment7.net> -Michael Johnson <ahze@ahze.net> -Paul Querna <chip@corelands.com> -Jamie McCarthy <jamie@mccarthy.vg> -Philip Neustrom <philipn@gmail.com> -Andrew O'Brien <andrewo@oriel.com.au> -Josh Rotenberg <joshrotenberg@gmail.com> -Robin H. Johnson <robbat2@gentoo.org> -Tim Yardley <liquid@haveheart.com> -Paolo Borelli <paolo.borelli@gmail.com> -Eli Bingham <eli@pandora.com> -Jean-Francois Bustarret <jfbustarret@wat.tv> -Paul G <paul-lists@perforge.com> -Paul Lindner <lindner@inuus.com> -Dormando <dormando@rydia.net> -Dustin Sallings <dustin@spy.net> -Chris Goffinet <goffinet@yahoo-inc.com> -Tomash Brechko <tomash.brechko@gmail.com> -Brian Aker <brian@tangent.org> -Trond Norbye <trond.norbye@sun.com> diff --git a/third_party/memcached/doc/Doxyfile b/third_party/memcached/doc/Doxyfile deleted file mode 100644 index e1b4afb3810bc65e259753e56d79ac0d2136a63a..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/Doxyfile +++ /dev/null @@ -1,1258 +0,0 @@ -# Doxyfile 1.5.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file that -# follow. The default is UTF-8 which is also the encoding used for all text before -# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into -# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of -# possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = memcached - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 0.8 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doxygen - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, -# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, -# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, -# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = NO - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = YES - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to -# include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = NO - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command <command> <input-file>, where <command> is the value of -# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = .. - -# This tag can be used to specify the character encoding of the source files that -# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default -# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. -# See http://www.gnu.org/software/libiconv for the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py - -FILE_PATTERNS = *.h \ - *.c - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = config.h - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the output. -# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, -# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = YES - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to -# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to -# specify the directory where the mscgen tool resides. If left empty the tool is assumed to -# be found in the default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a caller dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen will always -# show the root nodes and its direct children regardless of this setting. - -DOT_GRAPH_MAX_NODES = 50 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/third_party/memcached/doc/Makefile b/third_party/memcached/doc/Makefile deleted file mode 100644 index 9942940aadf3bd12b7d95f7ec19ede3b06cbfb2e..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/Makefile +++ /dev/null @@ -1,387 +0,0 @@ -# Makefile.in generated by automake 1.10.2 from Makefile.am. -# doc/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -pkgdatadir = $(datadir)/memcached -pkglibdir = $(libdir)/memcached -pkgincludedir = $(includedir)/memcached -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-unknown-linux-gnu -host_triplet = x86_64-unknown-linux-gnu -target_triplet = x86_64-unknown-linux-gnu -#am__append_1 = protocol-binary.txt protocol-binary-range.txt -subdir = doc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/version.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -man1dir = $(mandir)/man1 -am__installdirs = "$(DESTDIR)$(man1dir)" -NROFF = nroff -MANS = $(man_MANS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run aclocal-1.10 -AMTAR = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run tar -AUTOCONF = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run autoconf -AUTOHEADER = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run autoheader -AUTOMAKE = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run automake-1.10 -AWK = gawk -CC = gcc -std=gnu99 -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -pthread -Wall -Werror -pedantic -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DTRACE = -DTRACEFLAGS = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LDFLAGS = -LIBOBJS = -LIBS = -levent -LTLIBOBJS = -MAKEINFO = ${SHELL} /home/dormando/p/danga/memcached_github_new/missing --run makeinfo -MKDIR_P = /usr/bin/mkdir -p -OBJEXT = o -PACKAGE = memcached -PACKAGE_BUGREPORT = brad@danga.com -PACKAGE_NAME = memcached -PACKAGE_STRING = memcached 1.4.2 -PACKAGE_TARNAME = memcached -PACKAGE_VERSION = 1.4.2 -PATH_SEPARATOR = : -PROFILER = /usr/bin/gcov -PROFILER_FLAGS = -fprofile-arcs -ftest-coverage -PROFILER_LDFLAGS = -lgcov -SET_MAKE = -SHELL = /bin/sh -STRIP = -VERSION = 1.4.2 -XML2RFC = no -XSLTPROC = /usr/bin/xsltproc -abs_builddir = /home/dormando/p/danga/memcached_github_new/doc -abs_srcdir = /home/dormando/p/danga/memcached_github_new/doc -abs_top_builddir = /home/dormando/p/danga/memcached_github_new -abs_top_srcdir = /home/dormando/p/danga/memcached_github_new -ac_ct_CC = gcc -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = x86_64-unknown-linux-gnu -build_alias = -build_cpu = x86_64 -build_os = linux-gnu -build_vendor = unknown -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-unknown-linux-gnu -host_alias = -host_cpu = x86_64 -host_os = linux-gnu -host_vendor = unknown -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = $(SHELL) /home/dormando/p/danga/memcached_github_new/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = /usr/bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = x86_64-unknown-linux-gnu -target_alias = -target_cpu = x86_64 -target_os = linux-gnu -target_vendor = unknown -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -man_MANS = memcached.1 -EXTRA_DIST = *.txt -BUILT_SOURCES = $(am__append_1) -#MOSTLYCLEANFILES = protocol-binary.txt protocol-binary-range.txt -all: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-man1: $(man1_MANS) $(man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - if test -f $$i; then file=$$i; \ - else file=$(srcdir)/$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(MANS) -installdirs: - for dir in "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -clean: clean-am - -clean-am: clean-generic mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: install-man - -install-dvi: install-dvi-am - -install-exec-am: - -install-html: install-html-am - -install-info: install-info-am - -install-man: install-man1 - -install-pdf: install-pdf-am - -install-ps: install-ps-am - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-man - -uninstall-man: uninstall-man1 - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic distclean \ - distclean-generic distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ - uninstall-am uninstall-man uninstall-man1 - - -%.txt: %.full - no $< $@ - -%.chk: %.xml xml2rfc/rfc2629-refchk.xsl - /usr/bin/xsltproc xml2rfc/rfc2629-refchk.xsl $< >$@ - -%.full: %.xml xml2rfc/rfc2629-noinc.xsl - /usr/bin/xsltproc xml2rfc/rfc2629-noinc.xsl $< >$@ -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/third_party/memcached/doc/Makefile.am b/third_party/memcached/doc/Makefile.am deleted file mode 100644 index f9f4f463df77b01b8084b9217257ebc0f3bb8bd0..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -man_MANS = memcached.1 - -EXTRA_DIST = *.txt - -BUILT_SOURCES= - -if BUILD_SPECIFICATIONS -BUILT_SOURCES += protocol-binary.txt protocol-binary-range.txt -MOSTLYCLEANFILES = protocol-binary.txt protocol-binary-range.txt -endif - -%.txt: %.full - @XML2RFC@ $< $@ - -%.chk: %.xml xml2rfc/rfc2629-refchk.xsl - @XSLTPROC@ xml2rfc/rfc2629-refchk.xsl $< >$@ - -%.full: %.xml xml2rfc/rfc2629-noinc.xsl - @XSLTPROC@ xml2rfc/rfc2629-noinc.xsl $< >$@ - diff --git a/third_party/memcached/doc/Makefile.in b/third_party/memcached/doc/Makefile.in deleted file mode 100644 index 3daa23054a28243fee6c52f9615ee397187000ba..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/Makefile.in +++ /dev/null @@ -1,387 +0,0 @@ -# Makefile.in generated by automake 1.10.2 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -@BUILD_SPECIFICATIONS_TRUE@am__append_1 = protocol-binary.txt protocol-binary-range.txt -subdir = doc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/version.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -man1dir = $(mandir)/man1 -am__installdirs = "$(DESTDIR)$(man1dir)" -NROFF = nroff -MANS = $(man_MANS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DTRACE = @DTRACE@ -DTRACEFLAGS = @DTRACEFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PROFILER = @PROFILER@ -PROFILER_FLAGS = @PROFILER_FLAGS@ -PROFILER_LDFLAGS = @PROFILER_LDFLAGS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -XML2RFC = @XML2RFC@ -XSLTPROC = @XSLTPROC@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -man_MANS = memcached.1 -EXTRA_DIST = *.txt -BUILT_SOURCES = $(am__append_1) -@BUILD_SPECIFICATIONS_TRUE@MOSTLYCLEANFILES = protocol-binary.txt protocol-binary-range.txt -all: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-man1: $(man1_MANS) $(man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - if test -f $$i; then file=$$i; \ - else file=$(srcdir)/$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(MANS) -installdirs: - for dir in "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -clean: clean-am - -clean-am: clean-generic mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: install-man - -install-dvi: install-dvi-am - -install-exec-am: - -install-html: install-html-am - -install-info: install-info-am - -install-man: install-man1 - -install-pdf: install-pdf-am - -install-ps: install-ps-am - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-man - -uninstall-man: uninstall-man1 - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic distclean \ - distclean-generic distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ - uninstall-am uninstall-man uninstall-man1 - - -%.txt: %.full - @XML2RFC@ $< $@ - -%.chk: %.xml xml2rfc/rfc2629-refchk.xsl - @XSLTPROC@ xml2rfc/rfc2629-refchk.xsl $< >$@ - -%.full: %.xml xml2rfc/rfc2629-noinc.xsl - @XSLTPROC@ xml2rfc/rfc2629-noinc.xsl $< >$@ -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/third_party/memcached/doc/memcached.1 b/third_party/memcached/doc/memcached.1 deleted file mode 100644 index ee01a02783c26be80c9783dc584ba47c8dcf5318..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/memcached.1 +++ /dev/null @@ -1,143 +0,0 @@ -.TH MEMCACHED 1 "April 11, 2005" -.SH NAME -memcached \- high-performance memory object caching system -.SH SYNOPSIS -.B memcached -.RI [ options ] -.br -.SH DESCRIPTION -This manual page documents briefly the -.B memcached -memory object caching daemon. -.PP -.B memcached -is a flexible memory object caching daemon designed to alleviate database load -in dynamic web applications by storing objects in memory. It's based on -libevent to scale to any size needed, and is specifically optimized to avoid -swapping and always use non-blocking I/O. -.br -.SH OPTIONS -These programs follow the usual GNU command line syntax. A summary of options -is included below. -.TP -.B \-s <file> -Unix socket path to listen on (disables network support). -.TP -.B \-a <perms> -Permissions (in octal format) for Unix socket created with \-s option. -.TP -.B \-l <ip_addr> -Listen on <ip_addr>; default to INADDR_ANY. This is an important option to -consider as there is no other way to secure the installation. Binding to an -internal or firewalled network interface is suggested. -.TP -.B \-d -Run memcached as a daemon. -.TP -.B \-u <username> -Assume the identity of <username> (only when run as root). -.TP -.B \-m <num> -Use <num> MB memory max to use for object storage; the default is 64 megabytes. -.TP -.B \-c <num> -Use <num> max simultaneous connections; the default is 1024. -.TP -.B \-R <num> -This option seeks to prevent client starvation by setting a limit to the -number of sequential requests the server will process from an individual -client connection. Once a connection has exceeded this value, the server will -attempt to process I/O on other connections before handling any further -request from this connection. The default value for this option is 20. -.TP -.B \-k -Lock down all paged memory. This is a somewhat dangerous option with large -caches, so consult the README and memcached homepage for configuration -suggestions. -.TP -.B \-p <num> -Listen on TCP port <num>, the default is port 11211. -.TP -.B \-U <num> -Listen on UDP port <num>, the default is port 11211, 0 is off. -.TP -.B \-M -Disable automatic removal of items from the cache when out of memory. -Additions will not be possible until adequate space is freed up. -.TP -.B \-r -Raise the core file size limit to the maximum allowable. -.TP -.B \-f <factor> -Use <factor> as the multiplier for computing the sizes of memory chunks that -items are stored in. A lower value may result in less wasted memory depending -on the total amount of memory available and the distribution of item sizes. -The default is 1.25. -.TP -.B \-n <size> -Allocate a minimum of <size> bytes for the item key, value, and flags. The -default is 48. If you have a lot of small keys and values, you can get a -significant memory efficiency gain with a lower value. If you use a high -chunk growth factor (\-f option), on the other hand, you may want to increase -the size to allow a bigger percentage of your items to fit in the most densely -packed (smallest) chunks. -.TP -.B \-C -Disable the use of CAS (and reduce the per-item size by 8 bytes). -.TP -.B \-h -Show the version of memcached and a summary of options. -.TP -.B \-v -Be verbose during the event loop; print out errors and warnings. -.TP -.B \-vv -Be even more verbose; same as \-v but also print client commands and -responses. -.TP -.B \-i -Print memcached and libevent licenses. -.TP -.B \-P <filename> -Print pidfile to <filename>, only used under \-d option. -.TP -.B \-t <threads> -Number of threads to use to process incoming requests. This option is only -meaningful if memcached was compiled with thread support enabled. It is -typically not useful to set this higher than the number of CPU cores on the -memcached server. The default is 4. -.TP -.B \-D <char> -Use <char> as the delimiter between key prefixes and IDs. This is used for -per-prefix stats reporting. The default is ":" (colon). If this option is -specified, stats collection is turned on automatically; if not, then it may -be turned on by sending the "stats detail on" command to the server. -.TP -.B \-L -Try to use large memory pages (if available). Increasing the memory page size -could reduce the number of TLB misses and improve the performance. In order to -get large pages from the OS, memcached will allocate the total item-cache in -one large chunk. Only available if supported on your OS. -.TP -.B \-B <proto> -Specify the binding protocol to use. By default, the server will -autonegotiate client connections. By using this option, you can -specify the protocol clients must speak. Possible options are "auto" -(the default, autonegotiation behavior), "ascii" and "binary". -.br -.SH LICENSE -The memcached daemon is copyright Danga Interactive and is distributed under -the BSD license. Note that daemon clients are licensed separately. -.br -.SH SEE ALSO -The README file that comes with memcached -.br -.B http://www.danga.com/memcached -.SH AUTHOR -The memcached daemon was written by Anatoly Vorobey -.B <mellon@pobox.com> -and Brad Fitzpatrick -.B <brad@danga.com> -and the rest of the crew of Danga Interactive -.B http://www.danga.com -.br diff --git a/third_party/memcached/doc/memory_management.txt b/third_party/memcached/doc/memory_management.txt deleted file mode 100644 index 9a22d6a02d380dee9f563a9268a9f4e3c14852fb..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/memory_management.txt +++ /dev/null @@ -1,95 +0,0 @@ -Date: Tue, 20 Feb 2008 -From: Trond Norbye <trond.norbye@sun.com> - -When started with -L memcached will try to enable large memory -pages, and preallocate all memory up front. By using large memory -pages memcached could reduce the number of TLB misses (depending -on the access pattern), and hence improve performance. - -See http://en.wikipedia.org/wiki/Translation_lookaside_buffer for -a description of TLB. - -Date: Fri, 5 Sep 2003 20:31:03 +0300 -From: Anatoly Vorobey <mellon@pobox.com> -To: memcached@lists.danga.com -Subject: Re: Memory Management... - -On Fri, Sep 05, 2003 at 12:07:48PM -0400, Kyle R. Burton wrote: -> prefixing keys with a container identifier). We have just begun to -> look at the implementation of the memory management sub-system with -> regards to it's allocation, de-allocation and compaction approaches. -> Is there any documentation or discussion of how this subsystem -> operates? (slabs.c?) - -There's no documentation yet, and it's worth mentioning that this -subsystem is the most active area of memcached under development at the -moment (however, all the changes to it won't modify the way memcached -presents itself towards clients, they're primarily directed at making -memcached use memory more efficiently). - -Here's a quick recap of what it does now and what is being worked -on. - -The primary goal of the slabs subsystem in memcached was to eliminate -memory fragmentation issues totally by using fixed-size memory chunks -coming from a few predetermined size classes (early versions of -memcached relied on malloc()'s handling of fragmentation which proved -woefully inadequate for our purposes). For instance, suppose -we decide at the outset that the list of possible sizes is: 64 bytes, -128 bytes, 256 bytes, etc. - doubling all the way up to 1Mb. For each -size class in this list (each possible size) we maintain a list of free -chunks of this size. Whenever a request comes for a particular size, -it is rounded up to the closest size class and a free chunk is taken -from that size class. In the above example, if you request from the -slabs subsystem 100 bytes of memory, you'll actually get a chunk 128 -bytes worth, from the 128-bytes size class. If there are no free chunks -of the needed size at the moment, there are two ways to get one: 1) free -an existing chunk in the same size class, using LRU queues to free the -least needed objects; 2) get more memory from the system, which we -currently always do in _slabs_ of 1Mb each; we malloc() a slab, divide -it to chunks of the needed size, and use them. - -The tradeoff is between memory fragmentation and memory utilisation. In -the scheme we're now using, we have zero fragmentation, but a relatively -high percentage of memory is wasted. The most efficient way to reduce -the waste is to use a list of size classes that closely matches (if -that's at all possible) common sizes of objects that the clients -of this particular installation of memcached are likely to store. -For example, if your installation is going to store hundreds of -thousands of objects of the size exactly 120 bytes, you'd be much better -off changing, in the "naive" list of sizes outlined above, the class -of 128 bytes to something a bit higher (because the overhead of -storing an item, while not large, will push those 120-bytes objects over -128 bytes of storage internally, and will require using 256 bytes for -each of them in the naive scheme, forcing you to waste almost 50% of -memory). Such tinkering with the list of size classes is not currently -possible with memcached, but enabling it is one of the immediate goals. - -Ideally, the slabs subsystem would analyze at runtime the common sizes -of objects that are being requested, and would be able to modify the -list of sizes dynamically to improve memory utilisation. This is not -planned for the immediate future, however. What is planned is the -ability to reassign slabs to different classes. Here's what this means. -Currently, the total amount of memory allocated for each size class is -determined by how clients interact with memcached during the initial -phase of its execution, when it keeps malloc()'ing more slabs and -dividing them into chunks, until it hits the specified memory limit -(say, 2Gb, or whatever else was specified). Once it hits the limit, to -allocate a new chunk it'll always delete an existing chunk of the same -size (using LRU queues), and will never malloc() or free() any memory -from/to the system. So if, for example, during those initial few hours -of memcached's execution your clients mainly wanted to store very small -items, the bulk of memory allocated will be divided to small-sized -chunks, and the large size classes will get fewer memory, therefore the -life-cycle of large objects you'll store in memcached will henceforth -always be much shorter, with this instance of memcached (their LRU -queues will be shorter and they'll be pushed out much more often). In -general, if your system starts producing a different pattern of common -object sizes, the memcached servers will become less efficient, unless -you restart them. Slabs reassignment, which is the next feature being -worked on, will ensure the server's ability to reclaim a slab (1Mb of -memory) from one size class and put it into another class size, where -it's needed more. - --- -avva diff --git a/third_party/memcached/doc/protocol-binary-range.xml b/third_party/memcached/doc/protocol-binary-range.xml deleted file mode 100644 index 02711a8410c0542efa8f3f4ececf1a9426288306..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/protocol-binary-range.xml +++ /dev/null @@ -1,226 +0,0 @@ -<?xml version="1.0" encoding="US-ASCII"?> -<!DOCTYPE rfc SYSTEM "xml2rfc/rfc2629.dtd"> -<?xml-stylesheet type='text/xsl' href='xml2rfc/rfc2629.xslt'?> -<?rfc toc="yes"?> -<?rfc strict="yes"?> -<?rfc symrefs="yes"?> -<?rfc sortrefs="yes" ?> -<?rfc compact="yes" ?> -<?rfc subcompact="yes" ?> -<rfc category="info" docName="draft-stone-memcache-udp-01" ipr="none"> - - <front> - - <title abbrev="Memcache Over UDP"> Memcache Binary Protocol: Extensions for UDP </title> - - <author fullname="Aaron Stone" surname="Aaron Stone" role="editor"> - <organization>Six Apart, Ltd.</organization> - <address> - <postal> - <street>548 4th Street</street> - <city>San Francisco</city> - <region>CA</region> - <code>94107</code> - <country>USA</country> - </postal> - <email>aaron@serendipity.palo-alto.ca.us</email> - </address> - </author> - - <date day="14" month="December" year="2007" /> - - <area>Applications</area> - - <keyword>memcache memcached cache udp</keyword> - - <abstract> - <t> - This memo explains extensions to the memcache binary protocol for use in a UDP environment. - </t> - - <t> - Memcache is a high performance key-value cache. It is intentionally a - dumb cache, optimized for speed only. Applications using memcache do - not rely on it for data -- a persistent database with guaranteed reliability - is strongly recommended -- but applications can run much faster when - cached data is available in memcache. - </t> - </abstract> - </front> - - <middle> - <section anchor="introduction" title="Introduction"> - <t> - Memcache is a high performance key-value cache. It is intentionally a - dumb cache, optimized for speed only. Applications using memcache do - not rely on it for data -- a persistent database with guaranteed reliability - is strongly recommended -- but applications can run much faster when - cached data is available in memcache. - </t> - <t> - Sites may find that, due to their network architecture or application usage patterns, - the stateless <xref target="UDP"/> protocol better suits their needs. This document - provides extensions and descriptions of use of the <xref target="MEMCACHE">memcache protocol</xref> - in a UDP environment. - </t> - <t> - It is a goal of this document to provide sufficient information in each UDP packet - as to avoid any requirement for statefulness on the part of the server nor significant - caching of outstanding packets on the part of the client. - </t> - <section anchor="conventions" title="Conventions Used In This Document"> - <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", - "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this - document are to be interpreted as described in <xref target="KEYWORDS"/>. - </t> - </section> - </section> - - <section anchor="values" title="Defined Values"> - <section anchor="value-magic" title="Magic Byte"> - <t> - The magic bytes remains the same as in <xref target="MEMCACHE"/>. - </t> - </section> - - <section anchor="value-status" title="Response Status"> - <t> - Additional status values: - <list hangIndent="8" style="hanging"> - <t hangText="0x0004">Value is larger than a single response packet</t> - </list> - </t> - </section> - - <section anchor="value-opcodes" title="Command Opcodes"> - <t> - Additional opcode values: - <list hangIndent="8" style="hanging"> - <t hangText="0x0C">Get Range</t> - <t hangText="0x0D">Set Range</t> - </list> - </t> - </section> - - <section anchor="value-types" title="Data Types"> - <t> - There are no new data types in this extension. - </t> - </section> - </section> - - <section anchor="commands" title="Commands"> - - <section anchor="command-get" title="Get Response"> - <t> - This section extends the behavior of the Get and GetQ commands as described in - <xref target="MEMCACHE" x:sec="command-get"/>. - </t> - - <t> - When a Get or GetQ request is made via UDP, and the value of the key for which - the request was made is larger than can be placed into a single UDP packet (noting - that the protocol header must also be counted), a Get Range response packet - MUST be sent instead of the Get response packet. In this instance: - <list style="numbers"> - <t>The Status field of the response header MUST be 0x0004.</t> - <t>The Offset field of the GetR response extras MUST be 0.</t> - <t>The Length field of the GetR response extras, and the data contained in - the Value field of the packet, SHOULD be the maximum - allowed length of a UDP packet, less the space required by the header - and extras; however it MAY be any amount below this maximum.</t> - <t>The Total value length field of the response extras MUST be the - actual length of the complete value.</t> - </list> - </t> - - <t> - The client, upon receipt of a Get Range response bearing Status 0x004 - and a Message ID corresponding to its Get request, shall then know that - it has received only the first portion of the value. The client MAY choose - to request the remaining portion of the value by sending one or more Get Range requests. - </t> - </section> - - <section anchor="command-getr-request" title="Get Range Request"> - <t> - The Get Range request is primarily intended for use over a UDP transport - to request byte ranges of the value for a key. In the event that the Data version - check fails to match that of the key, an error MUST be returned. - </t> - <t> - <figure> - <preamble>Extra data for get range request:</preamble> - <artwork> -Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| Flags | - +---------------+---------------+---------------+---------------+ - 4| Data version check | - | | - +---------------+---------------+---------------+---------------+ -12| Offset | - +---------------+---------------+---------------+---------------+ -16| Length | - +---------------+---------------+---------------+---------------+ -Total 20 bytes - </artwork></figure> - </t> - </section> - - <section anchor="command-getr-response" title="Get Range Response"> - <t> - The Get Range request is primarily intended for use over a UDP transport - to indicate the location of the bytes of the value for a key contained in - a given packet. A client receives enough information in each Get Range - extras to construct an appropriately sized buffer in its own memory and - blindly insert the contents of the packet at the given byte offset. - </t> - <t> - <figure> - <preamble>Extra data for get range response:</preamble> - <artwork> -Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| Flags | - +---------------+---------------+---------------+---------------+ - 4| Data version check | - | | - +---------------+---------------+---------------+---------------+ -12| Offset | - +---------------+---------------+---------------+---------------+ -16| Length | - +---------------+---------------+---------------+---------------+ -20| Total value length | - +---------------+---------------+---------------+---------------+ -Total 24 bytes - </artwork></figure> - </t> - </section> - - </section> - - <section anchor="security" title="Security Considerations"> - <t> - This document does not introduce any new security considerations - beyond those discussed in <xref target="MEMCACHE" x:sec="security"/>. - </t> - </section> - - </middle> - - <back> - <references title="Normative References"> - <dwdrfc-ref anchor='UDP' src='http://xml.resource.org/public/rfc/bibxml/reference.RFC.0768.xml'/> - <dwdrfc-ref anchor='KEYWORDS' src='http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'/> - <!-- FIXME: Get a draft reference for the base document. --> - <dwdrfc-ref anchor='MEMCACHE' src='http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'/> - </references> - </back> - -</rfc> - diff --git a/third_party/memcached/doc/protocol-binary.xml b/third_party/memcached/doc/protocol-binary.xml deleted file mode 100644 index 96957ad0fc5869bfe2a1c4208c2d12326ff6d817..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/protocol-binary.xml +++ /dev/null @@ -1,1467 +0,0 @@ -<?xml version="1.0" encoding="US-ASCII"?> -<!DOCTYPE rfc SYSTEM "xml2rfc/rfc2629.dtd"> -<?xml-stylesheet type='text/xsl' href='xml2rfc/rfc2629.xslt'?> -<?rfc toc="yes"?> -<?rfc strict="yes"?> -<?rfc symrefs="yes"?> -<?rfc sortrefs="yes" ?> -<?rfc compact="yes" ?> -<?rfc subcompact="yes" ?> -<rfc category="info" docName="draft-stone-memcache-binary-01" ipr="none"> - <front> - <title> Memcache Binary Protocol </title> - - <author fullname="Aaron Stone" surname="Stone" role="editor"> - <organization>Six Apart, Ltd.</organization> - <address> - <postal> - <street>548 4th Street</street> - <city>San Francisco</city> - <region>CA</region> - <code>94107</code> - <country>USA</country> - </postal> - <email>aaron@serendipity.palo-alto.ca.us</email> - </address> - </author> - <author fullname="Trond Norbye" surname="Norbye" role="editor"> - <organization>Sun Microsystems, INC</organization> - <address> - <postal> - <street>Haakon VII g. 7B</street> - <city>Trondheim</city> - <code>NO-7485 Trondheim</code> - <country>Norway</country> - </postal> - <email>trond.norbye@sun.com</email> - </address> - </author> - <date day="28" month="August" year="2008" /> - <area>Applications</area> - <keyword>memcache memcached cache</keyword> - <abstract> - <t> - This memo explains the memcache binary protocol for informational - purposes. - </t> - <t> - Memcache is a high performance key-value cache. It is intentionally a - dumb cache, optimized for speed only. Applications using memcache do - not rely on it for data -- a persistent database with guaranteed - reliability is strongly recommended -- but applications can run much - faster when cached data is available in memcache. - </t> - </abstract> - </front> - - <middle> - <section anchor="introduction" title="Introduction"> - <t> - Memcache is a high performance key-value cache. It is intentionally a - dumb cache, optimized for speed only. Applications using memcache should - not rely on it for data -- a persistent database with guaranteed - reliability is strongly recommended -- but applications can run much - faster when cached data is available in memcache. - </t> - <t> - Memcache was originally written to make - <xref target="LJ">LiveJournal</xref> faster. It now powers all of - the fastest web sites that you love. - </t> - <section anchor="conventions" title="Conventions Used In This Document"> - <t> - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", - "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this - document are to be interpreted as described in - <xref target="KEYWORDS"/>. - </t> - </section> - </section> - - <section anchor="packet" title="Packet Structure"> - <figure> - <preamble>General format of a packet:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0/ HEADER / - / / - / / - / / - +---------------+---------------+---------------+---------------+ - 24/ COMMAND-SPECIFIC EXTRAS (as needed) / - +/ (note length in the extras length header field) / - +---------------+---------------+---------------+---------------+ - m/ Key (as needed) / - +/ (note length in key length header field) / - +---------------+---------------+---------------+---------------+ - n/ Value (as needed) / - +/ (note length is total body length header field, minus / - +/ sum of the extras and key length body fields) / - +---------------+---------------+---------------+---------------+ - Total 24 bytes - </artwork> - </figure> - - <figure> - <preamble>Request header:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| Magic | Opcode | Key length | - +---------------+---------------+---------------+---------------+ - 4| Extras length | Data type | Reserved | - +---------------+---------------+---------------+---------------+ - 8| Total body length | - +---------------+---------------+---------------+---------------+ - 12| Opaque | - +---------------+---------------+---------------+---------------+ - 16| CAS | - | | - +---------------+---------------+---------------+---------------+ - Total 24 bytes - </artwork> - </figure> - - <figure> - <preamble>Response header:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| Magic | Opcode | Key Length | - +---------------+---------------+---------------+---------------+ - 4| Extras length | Data type | Status | - +---------------+---------------+---------------+---------------+ - 8| Total body length | - +---------------+---------------+---------------+---------------+ - 12| Opaque | - +---------------+---------------+---------------+---------------+ - 16| CAS | - | | - +---------------+---------------+---------------+---------------+ - Total 24 bytes - </artwork> - </figure> - - <t> - Header fields: - <list hangIndent="20" style="hanging"> - <t hangText="Magic">Magic number.</t> - <t hangText="Opcode">Command code.</t> - <t hangText="Key length">Length in bytes of the text key that follows the command extras.</t> - <t hangText="Status">Status of the response (non-zero on error).</t> - <t hangText="Extras length">Length in bytes of the command extras.</t> - <t hangText="Data type">Reserved for future use (Sean is using this soon).</t> - <t hangText="Reserved">Really reserved for future use (up for grabs).</t> - <t hangText="Total body length">Length in bytes of extra + key + value.</t> - <t hangText="Opaque">Will be copied back to you in the response.</t> - <t hangText="CAS">Data version check.</t> - </list> - </t> - </section> - - <section anchor="values" title="Defined Values"> - <section anchor="value-magic" title="Magic Byte"> - <t> - <list hangIndent="8" style="hanging"> - <t hangText="0x80">Request packet for this protocol version</t> - <t hangText="0x81">Response packet for this protocol version</t> - </list> - </t> - - <t> - Magic byte / version. For each version of the protocol, we'll use a - different request/response value pair. This is useful for protocol - analyzers to distinguish the nature of the packet from the direction - which it is moving. Note, it is common to run a memcached instance on - a host that also runs an application server. Such a host will both - send and receive memcache packets. - </t> - - <t> - The version should hopefully correspond only to different meanings of - the command byte. In an ideal world, we will not change the header - format. As reserved bytes are given defined meaning, the protocol - version / magic byte values should be incremented. - </t> - - <t> - Traffic analysis tools are encouraged to identify memcache packets - and provide detailed interpretation if the magic bytes are recognized - and otherwise to provide a generic breakdown of the packet. Note, that - the key and value positions can always be identified even if the magic - byte or command opcode are not recognized. - </t> - </section> - - <section anchor="value-status" title="Response Status"> - <t> - Possible values of this two-byte field: - <list hangIndent="8" style="hanging"> - <t hangText="0x0000">No error</t> - <t hangText="0x0001">Key not found</t> - <t hangText="0x0002">Key exists</t> - <t hangText="0x0003">Value too large</t> - <t hangText="0x0004">Invalid arguments</t> - <t hangText="0x0005">Item not stored</t> - <t hangText="0x0006">Incr/Decr on non-numeric value.</t> - <t hangText="0x0081">Unknown command</t> - <t hangText="0x0082">Out of memory</t> - </list> - </t> - </section> - - <section anchor="value-opcodes" title="Command Opcodes"> - <t> - Possible values of the one-byte field: - <list hangIndent="8" style="hanging"> - <t hangText="0x00">Get</t> - <t hangText="0x01">Set</t> - <t hangText="0x02">Add</t> - <t hangText="0x03">Replace</t> - <t hangText="0x04">Delete</t> - <t hangText="0x05">Increment</t> - <t hangText="0x06">Decrement</t> - <t hangText="0x07">Quit</t> - <t hangText="0x08">Flush</t> - <t hangText="0x09">GetQ</t> - <t hangText="0x0A">No-op</t> - <t hangText="0x0B">Version</t> - <t hangText="0x0C">GetK</t> - <t hangText="0x0D">GetKQ</t> - <t hangText="0x0E">Append</t> - <t hangText="0x0F">Prepend</t> - <t hangText="0x10">Stat</t> - <t hangText="0x11">SetQ</t> - <t hangText="0x12">AddQ</t> - <t hangText="0x13">ReplaceQ</t> - <t hangText="0x14">DeleteQ</t> - <t hangText="0x15">IncrementQ</t> - <t hangText="0x16">DecrementQ</t> - <t hangText="0x17">QuitQ</t> - <t hangText="0x18">FlushQ</t> - <t hangText="0x19">AppendQ</t> - <t hangText="0x1A">PrependQ</t> - </list> - </t> - <t> - As a convention all of the commands ending with "Q" for - Quiet. A quiet version of a command will omit responses - that are considered uninteresting. Whether a given response - is interesting is dependent upon the command. See the - descriptions of the - <xref target="command-get">set commands</xref> - and <xref target="command-set">set commands</xref> for - examples of commands that include quiet variants. - </t> - </section> - - <section anchor="value-types" title="Data Types"> - <t> - Possible values of the one-byte field: - <list hangIndent="8" style="hanging"> - <t hangText="0x00">Raw bytes</t> - </list> - </t> - </section> - </section> - - <section title="Commands"> - <section anchor="command-introduction" title="Introduction"> - <t> - All communication is initiated by a request from the client, - and the server will respond to each request with zero or - multiple packets for each request. If the status code of a response - packet is non-nil, the body of the packet will contain a textual error - message. If the status code is nil, the command opcode will define the - layout of the body of the message. - </t> - <section anchor="command-introduction-example" title="Example"> - <t> - The following figure illustrates the packet layout for - a packet with an error message. - </t> - <figure> - <preamble>Packet layout:</preamble> - <artwork> - - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x81 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x01 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x09 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 24| 0x4e ('N') | 0x6f ('o') | 0x74 ('t') | 0x20 (' ') | - +---------------+---------------+---------------+---------------+ - 28| 0x66 ('f') | 0x6f ('o') | 0x75 ('u') | 0x6e ('n') | - +---------------+---------------+---------------+---------------+ - 32| 0x64 ('d') | - +---------------+ - Total 33 bytes (24 byte header, and 9 bytes value) - -Field (offset) (value) -Magic (0) : 0x81 -Opcode (1) : 0x00 -Key length (2,3) : 0x0000 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Status (6,7) : 0x0001 -Total body (8-11) : 0x00000009 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : None -Key : None -Value (24-32): The textual string "Not found" - </artwork> - </figure> - </section> - </section> - - <section anchor="command-get" title="Get, Get Quietly, Get Key, Get Key Quietly"> - <t> - Request: - </t> - <t> - <list style="empty"> - <t>MUST NOT have extras.</t> - <t>MUST have key.</t> - <t>MUST NOT have value.</t> - </list> - </t> - - <t> - <list style="symbols"> - <t>4 byte flags</t> - </list> - </t> - - <t> - Response (if found): - </t> - <t> - <list style="empty"> - <t>MUST have extras.</t> - <t>MAY have key.</t> - <t>MAY have value.</t> - </list> - </t> - - <t> - <list style="symbols"> - <t>4 byte flags</t> - </list> - </t> - - <t> - <figure> - <preamble>Extra data for the get commands:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| Flags | - +---------------+---------------+---------------+---------------+ - - Total 4 bytes - </artwork> - </figure> - </t> - - <t> - The get command gets a single key. The getq command is both mum - on cache miss and quiet, holding its response until a non-quiet - command is issued. Getk and getkq differs from get and getq by - adding the key into the response packet. - </t> - - <t> - You're not guaranteed a response to a getq/getkq cache hit until - you send a non-getq/getkq command later, which uncorks the - server and bundles up IOs to send to the client in one go. - </t> - - <t> - Clients should implement multi-get (still important for - reducing network roundtrips!) as n pipelined requests, the - first n-1 being getq/getkq, the last being a regular - get/getk. That way you're guaranteed to get a response, and - you know when the server's done. You can also do the naive - thing and send n pipelined get/getks, but then you could potentially - get back a lot of "NOT_FOUND" error code packets. - Alternatively, you can send 'n' getq/getkqs, followed by a - 'noop' command. - </t> - - <section anchor="command-get-example" title="Example"> - <t> - To request the data associated with the key "Hello" the - following fields must be specified in the packet. - </t> - <figure> - <preamble>get request:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x80 | 0x00 | 0x00 | 0x05 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x05 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 24| 0x48 ('H') | 0x65 ('e') | 0x6c ('l') | 0x6c ('l') | - +---------------+---------------+---------------+---------------+ - 28| 0x6f ('o') | - +---------------+ - - Total 29 bytes (24 byte header, and 5 bytes key) - -Field (offset) (value) -Magic (0) : 0x80 -Opcode (1) : 0x00 -Key length (2,3) : 0x0005 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Reserved (6,7) : 0x0000 -Total body (8-11) : 0x00000005 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : None -Key (24-29): The textual string: "Hello" -Value : None - </artwork> - </figure> - <t>If the item exist on the server the following packet is returned, - otherwise a packet with status code != 0 will be returned (see - <xref target="command-introduction">Introduction</xref>) - </t> - <figure> - <preamble>get/getq response:</preamble> - <artwork> - - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x81 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 4| 0x04 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x09 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x01 | - +---------------+---------------+---------------+---------------+ - 24| 0xde | 0xad | 0xbe | 0xef | - +---------------+---------------+---------------+---------------+ - 28| 0x57 ('W') | 0x6f ('o') | 0x72 ('r') | 0x6c ('l') | - +---------------+---------------+---------------+---------------+ - 32| 0x64 ('d') | - +---------------+ - - Total 33 bytes (24 byte header, 4 byte extras and 5 byte value) - -Field (offset) (value) -Magic (0) : 0x81 -Opcode (1) : 0x00 -Key length (2,3) : 0x0000 -Extra length (4) : 0x04 -Data type (5) : 0x00 -Status (6,7) : 0x0000 -Total body (8-11) : 0x00000009 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000001 -Extras : - Flags (24-27): 0xdeadbeef -Key : None -Value (28-32): The textual string "World" - </artwork> - </figure> - <figure> - <preamble>getk/getkq response:</preamble> - <artwork> - - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x81 | 0x00 | 0x00 | 0x05 | - +---------------+---------------+---------------+---------------+ - 4| 0x04 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x09 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x01 | - +---------------+---------------+---------------+---------------+ - 24| 0xde | 0xad | 0xbe | 0xef | - +---------------+---------------+---------------+---------------+ - 28| 0x48 ('H') | 0x65 ('e') | 0x6c ('l') | 0x6c ('l') | - +---------------+---------------+---------------+---------------+ - 32| 0x6f ('o') | 0x57 ('W') | 0x6f ('o') | 0x72 ('r') | - +---------------+---------------+---------------+---------------+ - 36| 0x6c ('l') | 0x64 ('d') | - +---------------+---------------+ - - Total 38 bytes (24 byte header, 4 byte extras, 5 byte key - and 5 byte value) - -Field (offset) (value) -Magic (0) : 0x81 -Opcode (1) : 0x00 -Key length (2,3) : 0x0005 -Extra length (4) : 0x04 -Data type (5) : 0x00 -Status (6,7) : 0x0000 -Total body (8-11) : 0x00000009 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000001 -Extras : - Flags (24-27): 0xdeadbeef -Key (28-32): The textual string: "Hello" -Value (33-37): The textual string: "World" - </artwork> - </figure> - </section> - </section> - - <section anchor="command-set" title="Set, Add, Replace"> - <t> - <list style="empty"> - <t>MUST have extras.</t> - <t>MUST have key.</t> - <t>MUST have value.</t> - </list> - </t> - - <t> - <list style="symbols"> - <t>4 byte flags</t> - <t>4 byte expiration time</t> - </list> - </t> - - <figure> - <preamble>Extra data for set/add/replace:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| Flags | - +---------------+---------------+---------------+---------------+ - 4| Expiration | - +---------------+---------------+---------------+---------------+ - Total 8 bytes - </artwork> - </figure> - - <t> - If the Data Version Check (CAS) is nonzero, the requested - operation MUST only succeed if the item exists and has a CAS value - identical to the provided value. - </t> - - <t> - Add MUST fail if the item already exist. - </t> - - <t> - Replace MUST fail if the item doesn't exist. - </t> - - <t> - Set should store the data unconditionally if the item exists - or not. - </t> - - <t> - Quiet mutations only return responses on failure. Success - is considered the general case and is suppressed when in - quiet mode, but errors should not be allowed to go - unnoticed. - </t> - - <section anchor="command-set-example" title="Example"> - <t>The following figure shows an add-command for - <list style="empty"> - <t>Key: "Hello"</t> - <t>Value: "World"</t> - <t>Flags: 0xdeadbeef</t> - <t>Expiry: in two hours</t> - </list> - </t> - <figure> - <preamble>Add request:</preamble> - <artwork> - - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x80 | 0x02 | 0x00 | 0x05 | - +---------------+---------------+---------------+---------------+ - 4| 0x08 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x12 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 24| 0xde | 0xad | 0xbe | 0xef | - +---------------+---------------+---------------+---------------+ - 28| 0x00 | 0x00 | 0x0e | 0x10 | - +---------------+---------------+---------------+---------------+ - 32| 0x48 ('H') | 0x65 ('e') | 0x6c ('l') | 0x6c ('l') | - +---------------+---------------+---------------+---------------+ - 36| 0x6f ('o') | 0x57 ('W') | 0x6f ('o') | 0x72 ('r') | - +---------------+---------------+---------------+---------------+ - 40| 0x6c ('l') | 0x64 ('d') | - +---------------+---------------+ - - Total 42 bytes (24 byte header, 8 byte extras, 5 byte key and - 5 byte value) - -Field (offset) (value) -Magic (0) : 0x80 -Opcode (1) : 0x02 -Key length (2,3) : 0x0005 -Extra length (4) : 0x08 -Data type (5) : 0x00 -Reserved (6,7) : 0x0000 -Total body (8-11) : 0x00000012 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : - Flags (24-27): 0xdeadbeef - Expiry (28-31): 0x00000e10 -Key (32-36): The textual string "Hello" -Value (37-41): The textual string "World" - </artwork> - </figure> - <t> - The response-packet contains no extra data, and the result of the - operation is signaled through the status code. If the command - succeeds, the CAS value for the item is returned in the CAS-field - of the packet. - </t> - <figure> - <preamble>Successful add response:</preamble> - <artwork> - - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x81 | 0x02 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x01 | - +---------------+---------------+---------------+---------------+ - - Total 24 bytes - -Field (offset) (value) -Magic (0) : 0x81 -Opcode (1) : 0x02 -Key length (2,3) : 0x0000 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Status (6,7) : 0x0000 -Total body (8-11) : 0x00000000 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000001 -Extras : None -Key : None -Value : None - </artwork> - </figure> - </section> - </section> - - <section anchor="command-delete" title="Delete"> - <t> - <list style="empty"> - <t>MUST NOT have extras.</t> - <t>MUST have key.</t> - <t>MUST NOT have value.</t> - </list> - </t> - - <t> - Delete the item with the specific key. - </t> - - <section anchor="command-delete-example" title="Example"> - <t>The following figure shows a delete message for the - item "Hello".</t> - <figure> - <preamble>Delete request:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x80 | 0x04 | 0x00 | 0x05 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x05 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 24| 0x48 ('H') | 0x65 ('e') | 0x6c ('l') | 0x6c ('l') | - +---------------+---------------+---------------+---------------+ - 28| 0x6f ('o') | - +---------------+ - - Total 29 bytes (24 byte header, 5 byte value) - -Field (offset) (value) -Magic (0) : 0x80 -Opcode (1) : 0x04 -Key length (2,3) : 0x0005 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Reserved (6,7) : 0x0000 -Total body (8-11) : 0x00000005 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : None -Key : The textual string "Hello" -Value : None - </artwork> - </figure> - <t> - The response-packet contains no extra data, and the result of the - operation is signaled through the status code. - </t> - </section> - </section> - - <section anchor="command-incr" title="Increment, Decrement"> - <t> - <list style="empty"> - <t>MUST have extras.</t> - <t>MUST have key.</t> - <t>MUST NOT have value.</t> - </list> - </t> - - <t> - <list style="symbols"> - <t>8 byte value to add / subtract</t> - <t>8 byte initial value (unsigned)</t> - <t>4 byte expiration time</t> - </list> - </t> - <figure> - <preamble>Extra data for incr/decr:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| Amount to add | - | | - +---------------+---------------+---------------+---------------+ - 8| Initial value | - | | - +---------------+---------------+---------------+---------------+ - 16| Expiration | - +---------------+---------------+---------------+---------------+ - Total 20 bytes - </artwork> - </figure> - - <t> - These commands will either add or remove the specified - amount to the requested counter. - </t> - <t> - If the counter does not exist, one of two things may happen: - </t> - <t> - <list style="numbers"> - <t>If the expiration value is all one-bits (0xffffffff), the - operation will fail with NOT_FOUND.</t> - <t>For all other expiration values, the operation will succeed - by seeding the value for this key with the provided initial - value to expire with the provided expiration time. The flags - will be set to zero.</t> - </list> - </t> - <figure> - <preamble>incr/decr response body:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 64-bit unsigned response. | - | | - +---------------+---------------+---------------+---------------+ - Total 8 bytes - </artwork> - </figure> - <section anchor="command-incr-example" title="Example"> - <t>The following figure shows an incr-command for - <list style="empty"> - <t>Key: "counter"</t> - <t>Delta: 0x01</t> - <t>Initial: 0x00</t> - <t>Expiry: in two hours</t> - </list> - </t> - <figure> - <preamble>Increment request:</preamble> - <artwork> - - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x80 | 0x05 | 0x00 | 0x07 | - +---------------+---------------+---------------+---------------+ - 4| 0x14 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x1b | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 24| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 28| 0x00 | 0x00 | 0x00 | 0x01 | - +---------------+---------------+---------------+---------------+ - 32| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 36| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 40| 0x00 | 0x00 | 0x0e | 0x10 | - +---------------+---------------+---------------+---------------+ - 44| 0x63 ('c') | 0x6f ('o') | 0x75 ('u') | 0x6e ('n') | - +---------------+---------------+---------------+---------------+ - 48| 0x74 ('t') | 0x65 ('e') | 0x72 ('r') | - +---------------+---------------+---------------+ - Total 51 bytes (24 byte header, 20 byte extras, 7 byte key) - -Field (offset) (value) -Magic (0) : 0x80 -Opcode (1) : 0x05 -Key length (2,3) : 0x0007 -Extra length (4) : 0x14 -Data type (5) : 0x00 -Reserved (6,7) : 0x0000 -Total body (8-11) : 0x0000001b -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : - delta (24-31): 0x0000000000000001 - initial (32-39): 0x0000000000000000 - exipration (40-43): 0x00000e10 -Key : Textual string "counter" -Value : None - </artwork> - </figure> - <t> - If the key doesn't exist, the server will respond with the - initial value. If not the incremented value will be returned. - Let's assume that the key didn't exist, so the initial value - is returned. - </t> - <figure> - <preamble>Increment response:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x81 | 0x05 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x08 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x05 | - +---------------+---------------+---------------+---------------+ - 24| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 28| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - Total 32 bytes (24 byte header, 8 byte value) - -Field (offset) (value) -Magic (0) : 0x81 -Opcode (1) : 0x05 -Key length (2,3) : 0x0000 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Status (6,7) : 0x0000 -Total body (8-11) : 0x00000008 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000005 -Extras : None -Key : None -Value : 0x0000000000000000 - </artwork> - </figure> - </section> - </section> - - <section anchor="command-quit" title="quit"> - <t> - <list style="empty"> - <t>MUST NOT have extras.</t> - <t>MUST NOT have key.</t> - <t>MUST NOT have value.</t> - </list> - </t> - - <t> - Close the connection to the server. - </t> - - <section anchor="command-quit-example" title="Example"> - <figure> - <preamble>Quit request:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x80 | 0x07 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - Total 24 bytes - -Field (offset) (value) -Magic (0) : 0x80 -Opcode (1) : 0x07 -Key length (2,3) : 0x0000 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Reserved (6,7) : 0x0000 -Total body (8-11) : 0x00000000 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : None -Key : None -Value : None - </artwork> - </figure> - <t> - The response-packet contains no extra data, and the result of the - operation is signaled through the status code. The server will - then close the connection. - </t> - </section> - </section> - - <section anchor="command-flush" title="Flush"> - <t> - <list style="empty"> - <t>MAY have extras.</t> - <t>MUST NOT have key.</t> - <t>MUST NOT have value.</t> - </list> - </t> - - <t> - <list style="symbols"> - <t>4 byte expiration time</t> - </list> - </t> - <figure> - <preamble>Extra data for flush:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| Expiration | - +---------------+---------------+---------------+---------------+ - Total 4 bytes - </artwork> - </figure> - <t> - Flush the items in the cache now or some time in the future as - specified by the expiration field. See the documentation of the - textual protocol for the full description on how to specify the - expiration time. - </t> - <section anchor="command-flush-example" title="Example"> - <t> - To flush the cache (delete all items) in two hours, the set - the following values in the request - </t> - <figure> - <preamble>Flush request:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x80 | 0x08 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 4| 0x04 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x04 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 24| 0x00 | 0x00 | 0x0e | 0x10 | - +---------------+---------------+---------------+---------------+ - Total 28 bytes (24 byte header, 4 byte body) - -Field (offset) (value) -Magic (0) : 0x80 -Opcode (1) : 0x08 -Key length (2,3) : 0x0000 -Extra length (4) : 0x04 -Data type (5) : 0x00 -Reserved (6,7) : 0x0000 -Total body (8-11) : 0x00000004 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : - Expiry (24-27): 0x000e10 -Key : None -Value : None - </artwork> - </figure> - <t> - The response-packet contains no extra data, and the result of the - operation is signaled through the status code. - </t> - </section> - </section> - <section anchor="command-noop" title="noop"> - <t> - <list style="empty"> - <t>MUST NOT have extras.</t> - <t>MUST NOT have key.</t> - <t>MUST NOT have value.</t> - </list> - </t> - - <t> - Used as a keep alive. Flushes outstanding getq/getkq's. - </t> - <section anchor="command-noop-example" title="Example"> - <figure> - <preamble>Noop request:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x80 | 0x0a | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - Total 24 bytes - -Field (offset) (value) -Magic (0) : 0x80 -Opcode (1) : 0x0a -Key length (2,3) : 0x0000 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Reserved (6,7) : 0x0000 -Total body (8-11) : 0x00000000 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : None -Key : None -Value : None - </artwork> - </figure> - <t> - The response-packet contains no extra data, and the result of the - operation is signaled through the status code. - </t> - </section> - </section> - - <section anchor="command-version" title="version"> - <t> - <list style="empty"> - <t>MUST NOT have extras.</t> - <t>MUST NOT have key.</t> - <t>MUST NOT have value.</t> - </list> - </t> - - <t> - Request the server version. - </t> - <t> - The server responds with a packet containing the version string - in the body with the following format: "x.y.z" - </t> - <section anchor="command-version-example" title="Example"> - <figure> - <preamble>Version request:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x80 | 0x0b | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - Total 24 bytes - -Field (offset) (value) -Magic (0) : 0x80 -Opcode (1) : 0x0b -Key length (2,3) : 0x0000 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Reserved (6,7) : 0x0000 -Total body (8-11) : 0x00000000 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : None - </artwork> - </figure> - <figure> - <preamble>Version response:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x81 | 0x0b | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x05 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 24| 0x31 ('1') | 0x2e ('.') | 0x33 ('3') | 0x2e ('.') | - +---------------+---------------+---------------+---------------+ - 28| 0x31 ('1') | - +---------------+ - Total 29 bytes (24 byte header, 5 byte body) - -Field (offset) (value) -Magic (0) : 0x81 -Opcode (1) : 0x0b -Key length (2,3) : 0x0000 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Status (6,7) : 0x0000 -Total body (8-11) : 0x00000005 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : None -Key : None -Value : Textual string "1.3.1" - </artwork> - </figure> - </section> - </section> - - <section anchor="command-append" title="Append, Prepend"> - <t> - <list style="empty"> - <t>MUST NOT have extras.</t> - <t>MUST have key.</t> - <t>MUST have value.</t> - </list> - </t> - - <t> - These commands will either append or prepend the specified - value to the requested key. - </t> - - <section anchor="command-append-example" title="Example"> - <t>The following example appends '!' to the 'Hello' key.</t> - <figure> - <preamble>Append request:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x80 | 0x0e | 0x00 | 0x05 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x06 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 24| 0x48 ('H') | 0x65 ('e') | 0x6c ('l') | 0x6c ('l') | - +---------------+---------------+---------------+---------------+ - 28| 0x6f ('o') | 0x21 ('!') | - +---------------+---------------+ - Total 30 bytes (24 byte header, 5 byte key, 1 byte value) - -Field (offset) (value) -Magic (0) : 0x80 -Opcode (1) : 0x0e -Key length (2,3) : 0x0005 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Reserved (6,7) : 0x0000 -Total body (8-11) : 0x00000006 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : None -Key (24-28): The textual string "Hello" -Value (29) : "!" - </artwork> - </figure> - <t> - The response-packet contains no extra data, and the result of the - operation is signaled through the status code. - </t> - </section> - </section> - - <section anchor="command-stat" title="Stat"> - <t> - <list style="empty"> - <t>MUST NOT have extras.</t> - <t>MAY have key.</t> - <t>MUST NOT have value.</t> - </list> - </t> - - <t> - Request server statistics. Without a key specified the server will - respond with a "default" set of statistics information. Each piece - of statistical information is returned in its own packet (key - contains the name of the statistical item and the body contains the - value in ASCII format). The sequence of return packets is terminated - with a packet that contains no key and no value. - </t> - <section anchor="command-stat-example" title="Example"> - <t>The following example requests all statistics from the server</t> - <figure> - <preamble>Stat request:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x80 | 0x10 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - Total 24 bytes - -Field (offset) (value) -Magic (0) : 0x80 -Opcode (1) : 0x10 -Key length (2,3) : 0x0000 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Reserved (6,7) : 0x0000 -Total body (8-11) : 0x00000000 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Extras : None -Key : None -Value : None - </artwork> - </figure> - <t> - The server will send each value in a separate packet with - an "empty" packet (no key / no value) to terminate the sequence. - Each of the response packets look like the following example: - </t> - <figure> - <preamble>Stat response:</preamble> - <artwork> - Byte/ 0 | 1 | 2 | 3 | - / | | | | - |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| - +---------------+---------------+---------------+---------------+ - 0| 0x81 | 0x10 | 0x00 | 0x03 | - +---------------+---------------+---------------+---------------+ - 4| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 8| 0x00 | 0x00 | 0x00 | 0x07 | - +---------------+---------------+---------------+---------------+ - 12| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 16| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 20| 0x00 | 0x00 | 0x00 | 0x00 | - +---------------+---------------+---------------+---------------+ - 24| 0x70 ('p') | 0x69 ('i') | 0x64 ('d') | 0x33 ('3') | - +---------------+---------------+---------------+---------------+ - 28| 0x30 ('0') | 0x37 ('7') | 0x38 ('8') | - +---------------+---------------+---------------+ - Total 31 bytes (24 byte header, 3 byte key, 4 byte body) - -Field (offset) (value) -Magic (0) : 0x81 -Opcode (1) : 0x10 -Key length (2,3) : 0x0003 -Extra length (4) : 0x00 -Data type (5) : 0x00 -Status (6,7) : 0x0000 -Total body (8-11) : 0x00000007 -Opaque (12-15): 0x00000000 -CAS (16-23): 0x0000000000000000 -Exstras : None -Key : The textual string "pid" -Value : The textual string "3078" - </artwork> - </figure> - </section> - </section> - </section> - <section anchor="security" title="Security Considerations"> - <t> - Memcache has no authentication or security layers whatsoever. It is - RECOMMENDED that memcache be deployed strictly on closed, protected, - back-end networks within a single data center, within a single cluster of - servers, or even on a single host, providing shared caching for multiple - applications. Memcache MUST NOT be made available on a public network. - </t> - </section> - - </middle> - - <back> - <references title="Normative References"> - <reference anchor="LJ"> - <front> - <title>LJ NEEDS MOAR SPEED</title> - <author fullname="Brad Fitzpatrick"> - <organization>Danga Interactive</organization> - </author> - <date day="5" month="10" year="1999" /> - <abstract> - <t>http://www.livejournal.com/</t> - </abstract> - </front> - </reference> - <dwdrfc-ref anchor="KEYWORDS" src='http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'/> - </references> - - <section anchor="acknowledgments" title="Acknowledgments"> - <t> - Thanks to Brad Fitzpatrick, Anatoly Vorobey, Steven Grimm, and Dustin - Sallings, for their work on the memcached server. - </t> - - <t> - Thanks to Sean Chittenden, Jonathan Steinert, Brian Aker, Evan Martin, - Nathan Neulinger, Eric Hodel, Michael Johnson, Paul Querna, Jamie - McCarthy, Philip Neustrom, Andrew O'Brien, Josh Rotenberg, Robin H. - Johnson, Tim Yardley, Paolo Borelli, Eli Bingham, Jean-Francois - Bustarret, Paul G, Paul Lindner, Alan Kasindorf, Chris Goffinet, Tomash - Brechko, and others for their work reporting bugs and maintaining - memcached client libraries and bindings in many languages. - </t> - </section> - </back> - -</rfc> - diff --git a/third_party/memcached/doc/protocol.txt b/third_party/memcached/doc/protocol.txt deleted file mode 100644 index 951728012a4f9f86265c22796fce4a74135eb2ef..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/protocol.txt +++ /dev/null @@ -1,662 +0,0 @@ -Protocol --------- - -Clients of memcached communicate with server through TCP connections. -(A UDP interface is also available; details are below under "UDP -protocol.") A given running memcached server listens on some -(configurable) port; clients connect to that port, send commands to -the server, read responses, and eventually close the connection. - -There is no need to send any command to end the session. A client may -just close the connection at any moment it no longer needs it. Note, -however, that clients are encouraged to cache their connections rather -than reopen them every time they need to store or retrieve data. This -is because memcached is especially designed to work very efficiently -with a very large number (many hundreds, more than a thousand if -necessary) of open connections. Caching connections will eliminate the -overhead associated with establishing a TCP connection (the overhead -of preparing for a new connection on the server side is insignificant -compared to this). - -There are two kinds of data sent in the memcache protocol: text lines -and unstructured data. Text lines are used for commands from clients -and responses from servers. Unstructured data is sent when a client -wants to store or retrieve data. The server will transmit back -unstructured data in exactly the same way it received it, as a byte -stream. The server doesn't care about byte order issues in -unstructured data and isn't aware of them. There are no limitations on -characters that may appear in unstructured data; however, the reader -of such data (either a client or a server) will always know, from a -preceding text line, the exact length of the data block being -transmitted. - -Text lines are always terminated by \r\n. Unstructured data is _also_ -terminated by \r\n, even though \r, \n or any other 8-bit characters -may also appear inside the data. Therefore, when a client retrieves -data from a server, it must use the length of the data block (which it -will be provided with) to determine where the data block ends, and not -the fact that \r\n follows the end of the data block, even though it -does. - -Keys ----- - -Data stored by memcached is identified with the help of a key. A key -is a text string which should uniquely identify the data for clients -that are interested in storing and retrieving it. Currently the -length limit of a key is set at 250 characters (of course, normally -clients wouldn't need to use such long keys); the key must not include -control characters or whitespace. - -Commands --------- - -There are three types of commands. - -Storage commands (there are six: "set", "add", "replace", "append" -"prepend" and "cas") ask the server to store some data identified by a -key. The client sends a command line, and then a data block; after -that the client expects one line of response, which will indicate -success or faulure. - -Retrieval commands (there are two: "get" and "gets") ask the server to -retrieve data corresponding to a set of keys (one or more keys in one -request). The client sends a command line, which includes all the -requested keys; after that for each item the server finds it sends to -the client one response line with information about the item, and one -data block with the item's data; this continues until the server -finished with the "END" response line. - -All other commands don't involve unstructured data. In all of them, -the client sends one command line, and expects (depending on the -command) either one line of response, or several lines of response -ending with "END" on the last line. - -A command line always starts with the name of the command, followed by -parameters (if any) delimited by whitespace. Command names are -lower-case and are case-sensitive. - -Expiration times ----------------- - -Some commands involve a client sending some kind of expiration time -(relative to an item or to an operation requested by the client) to -the server. In all such cases, the actual value sent may either be -Unix time (number of seconds since January 1, 1970, as a 32-bit -value), or a number of seconds starting from current time. In the -latter case, this number of seconds may not exceed 60*60*24*30 (number -of seconds in 30 days); if the number sent by a client is larger than -that, the server will consider it to be real Unix time value rather -than an offset from current time. - - -Error strings -------------- - -Each command sent by a client may be answered with an error string -from the server. These error strings come in three types: - -- "ERROR\r\n" - - means the client sent a nonexistent command name. - -- "CLIENT_ERROR <error>\r\n" - - means some sort of client error in the input line, i.e. the input - doesn't conform to the protocol in some way. <error> is a - human-readable error string. - -- "SERVER_ERROR <error>\r\n" - - means some sort of server error prevents the server from carrying - out the command. <error> is a human-readable error string. In cases - of severe server errors, which make it impossible to continue - serving the client (this shouldn't normally happen), the server will - close the connection after sending the error line. This is the only - case in which the server closes a connection to a client. - - -In the descriptions of individual commands below, these error lines -are not again specifically mentioned, but clients must allow for their -possibility. - - -Storage commands ----------------- - -First, the client sends a command line which looks like this: - -<command name> <key> <flags> <exptime> <bytes> [noreply]\r\n -cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]\r\n - -- <command name> is "set", "add", "replace", "append" or "prepend" - - "set" means "store this data". - - "add" means "store this data, but only if the server *doesn't* already - hold data for this key". - - "replace" means "store this data, but only if the server *does* - already hold data for this key". - - "append" means "add this data to an existing key after existing data". - - "prepend" means "add this data to an existing key before existing data". - - The append and prepend commands do not accept flags or exptime. - They update existing data portions, and ignore new flag and exptime - settings. - - "cas" is a check and set operation which means "store this data but - only if no one else has updated since I last fetched it." - -- <key> is the key under which the client asks to store the data - -- <flags> is an arbitrary 16-bit unsigned integer (written out in - decimal) that the server stores along with the data and sends back - when the item is retrieved. Clients may use this as a bit field to - store data-specific information; this field is opaque to the server. - Note that in memcached 1.2.1 and higher, flags may be 32-bits, instead - of 16, but you might want to restrict yourself to 16 bits for - compatibility with older versions. - -- <exptime> is expiration time. If it's 0, the item never expires - (although it may be deleted from the cache to make place for other - items). If it's non-zero (either Unix time or offset in seconds from - current time), it is guaranteed that clients will not be able to - retrieve this item after the expiration time arrives (measured by - server time). - -- <bytes> is the number of bytes in the data block to follow, *not* - including the delimiting \r\n. <bytes> may be zero (in which case - it's followed by an empty data block). - -- <cas unique> is a unique 64-bit value of an existing entry. - Clients should use the value returned from the "gets" command - when issuing "cas" updates. - -- "noreply" optional parameter instructs the server to not send the - reply. NOTE: if the request line is malformed, the server can't - parse "noreply" option reliably. In this case it may send the error - to the client, and not reading it on the client side will break - things. Client should construct only valid requests. - -After this line, the client sends the data block: - -<data block>\r\n - -- <data block> is a chunk of arbitrary 8-bit data of length <bytes> - from the previous line. - -After sending the command line and the data blockm the client awaits -the reply, which may be: - -- "STORED\r\n", to indicate success. - -- "NOT_STORED\r\n" to indicate the data was not stored, but not -because of an error. This normally means that the -condition for an "add" or a "replace" command wasn't met. - -- "EXISTS\r\n" to indicate that the item you are trying to store with -a "cas" command has been modified since you last fetched it. - -- "NOT_FOUND\r\n" to indicate that the item you are trying to store -with a "cas" command did not exist. - - -Retrieval command: ------------------- - -The retrieval commands "get" and "gets" operates like this: - -get <key>*\r\n -gets <key>*\r\n - -- <key>* means one or more key strings separated by whitespace. - -After this command, the client expects zero or more items, each of -which is received as a text line followed by a data block. After all -the items have been transmitted, the server sends the string - -"END\r\n" - -to indicate the end of response. - -Each item sent by the server looks like this: - -VALUE <key> <flags> <bytes> [<cas unique>]\r\n -<data block>\r\n - -- <key> is the key for the item being sent - -- <flags> is the flags value set by the storage command - -- <bytes> is the length of the data block to follow, *not* including - its delimiting \r\n - -- <cas unique> is a unique 64-bit integer that uniquely identifies - this specific item. - -- <data block> is the data for this item. - -If some of the keys appearing in a retrieval request are not sent back -by the server in the item list this means that the server does not -hold items with such keys (because they were never stored, or stored -but deleted to make space for more items, or expired, or explicitly -deleted by a client). - - -Deletion --------- - -The command "delete" allows for explicit deletion of items: - -delete <key> [noreply]\r\n - -- <key> is the key of the item the client wishes the server to delete - -- "noreply" optional parameter instructs the server to not send the - reply. See the note in Storage commands regarding malformed - requests. - -The response line to this command can be one of: - -- "DELETED\r\n" to indicate success - -- "NOT_FOUND\r\n" to indicate that the item with this key was not - found. - -See the "flush_all" command below for immediate invalidation -of all existing items. - - -Increment/Decrement -------------------- - -Commands "incr" and "decr" are used to change data for some item -in-place, incrementing or decrementing it. The data for the item is -treated as decimal representation of a 64-bit unsigned integer. If -the current data value does not conform to such a representation, the -incr/decr commands return an error (memcached <= 1.2.6 treated the -bogus value as if it were 0, leading to confusing). Also, the item -must already exist for incr/decr to work; these commands won't pretend -that a non-existent key exists with value 0; instead, they will fail. - -The client sends the command line: - -incr <key> <value> [noreply]\r\n - -or - -decr <key> <value> [noreply]\r\n - -- <key> is the key of the item the client wishes to change - -- <value> is the amount by which the client wants to increase/decrease -the item. It is a decimal representation of a 64-bit unsigned integer. - -- "noreply" optional parameter instructs the server to not send the - reply. See the note in Storage commands regarding malformed - requests. - -The response will be one of: - -- "NOT_FOUND\r\n" to indicate the item with this value was not found - -- <value>\r\n , where <value> is the new value of the item's data, - after the increment/decrement operation was carried out. - -Note that underflow in the "decr" command is caught: if a client tries -to decrease the value below 0, the new value will be 0. Overflow in -the "incr" command will wrap around the 64 bit mark. - -Note also that decrementing a number such that it loses length isn't -guaranteed to decrement its returned length. The number MAY be -space-padded at the end, but this is purely an implementation -optimization, so you also shouldn't rely on that. - -Statistics ----------- - -The command "stats" is used to query the server about statistics it -maintains and other internal data. It has two forms. Without -arguments: - -stats\r\n - -it causes the server to output general-purpose statistics and -settings, documented below. In the other form it has some arguments: - -stats <args>\r\n - -Depending on <args>, various internal data is sent by the server. The -kinds of arguments and the data sent are not documented in this vesion -of the protocol, and are subject to change for the convenience of -memcache developers. - - -General-purpose statistics --------------------------- - -Upon receiving the "stats" command without arguments, the server sents -a number of lines which look like this: - -STAT <name> <value>\r\n - -The server terminates this list with the line - -END\r\n - -In each line of statistics, <name> is the name of this statistic, and -<value> is the data. The following is the list of all names sent in -response to the "stats" command, together with the type of the value -sent for this name, and the meaning of the value. - -In the type column below, "32u" means a 32-bit unsigned integer, "64u" -means a 64-bit unsigner integer. '32u.32u' means two 32-but unsigned -integers separated by a colon (treat this as a floating point number). - -|-----------------------+---------+-------------------------------------------| -| Name | Type | Meaning | -|-----------------------+---------+-------------------------------------------| -| pid | 32u | Process id of this server process | -| uptime | 32u | Number of secs since the server started | -| time | 32u | current UNIX time according to the server | -| version | string | Version string of this server | -| pointer_size | 32 | Default size of pointers on the host OS | -| | | (generally 32 or 64) | -| rusage_user | 32u.32u | Accumulated user time for this process | -| | | (seconds:microseconds) | -| rusage_system | 32u.32u | Accumulated system time for this process | -| | | (seconds:microseconds) | -| curr_items | 32u | Current number of items stored | -| total_items | 32u | Total number of items stored since | -| | | the server started | -| bytes | 64u | Current number of bytes used | -| | | to store items | -| curr_connections | 32u | Number of open connections | -| total_connections | 32u | Total number of connections opened since | -| | | the server started running | -| connection_structures | 32u | Number of connection structures allocated | -| | | by the server | -| cmd_get | 64u | Cumulative number of retrieval reqs | -| cmd_set | 64u | Cumulative number of storage reqs | -| get_hits | 64u | Number of keys that have been requested | -| | | and found present | -| get_misses | 64u | Number of items that have been requested | -| | | and not found | -| delete_misses | 64u | Number of deletions reqs for missing keys | -| delete_hits | 64u | Number of deletion reqs resulting in | -| | | an item being removed. | -| incr_misses | 64u | Number of incr reqs against missing keys. | -| incr_hits | 64u | Number of successful incr reqs. | -| decr_misses | 64u | Number of decr reqs against missing keys. | -| decr_hits | 64u | Number of successful decr reqs. | -| cas_misses | 64u | Number of CAS reqs against missing keys. | -| cas_hits | 64u | Number of successful CAS reqs. | -| cas_badval | 64u | Number of CAS reqs for which a key was | -| | | found, but the CAS value did not match. | -| evictions | 64u | Number of valid items removed from cache | -| | | to free memory for new items | -| bytes_read | 64u | Total number of bytes read by this server | -| | | from network | -| bytes_written | 64u | Total number of bytes sent by this server | -| | | to network | -| limit_maxbytes | 32u | Number of bytes this server is allowed to | -| | | use for storage. | -| threads | 32u | Number of worker threads requested. | -| | | (see doc/threads.txt) | -| conn_yields | 64u | Number of times any connection yielded to | -| | | another due to hitting the -R limit. | -|-----------------------+---------+-------------------------------------------| - -Settings statistics -------------------- -CAVEAT: This section describes statistics which are subject to change in the -future. - -The "stats" command with the argument of "settings" returns details of -the settings of the running memcached. This is primarily made up of -the results of processing commandline options. - -Note that these are not guaranteed to return in any specific order and -this list may not be exhaustive. Otherwise, this returns like any -other stats command. - -|-----------------+----------+----------------------------------------------| -| Name | Type | Meaning | -|-----------------+----------+----------------------------------------------| -| maxbytes | size_t | Maximum number of bytes allows in this cache | -| maxconns | 32 | Maximum number of clients allowed. | -| tcpport | 32 | TCP listen port. | -| udpport | 32 | UDP listen port. | -| inter | string | Listen interface. | -| verbosity | 32 | 0 = none, 1 = some, 2 = lots | -| oldest | 32u | Age of the oldest honored object. | -| evictions | on/off | When off, LRU evictions are disabled. | -| domain_socket | string | Path to the domain socket (if any). | -| umask | 32 (oct) | umask for the creation of the domain socket. | -| growth_factor | float | Chunk size growth factor. | -| chunk_size | 32 | Minimum space allocated for key+value+flags | -| num_threads | 32 | Number of threads (including dispatch). | -| stat_key_prefix | char | Stats prefix separator character. | -| detail_enabled | bool | If yes, stats detail is enabled. | -| reqs_per_event | 32 | Max num IO ops processed within an event. | -| cas_enabled | bool | When no, CAS is not enabled for this server. | -| tcp_backlog | 32 | TCP listen backlog. -|-----------------+----------+----------------------------------------------| - - -Item statistics ---------------- -CAVEAT: This section describes statistics which are subject to change in the -future. - -The "stats" command with the argument of "items" returns information about -item storage per slab class. The data is returned in the format: - -STAT items:<slabclass>:<stat> <value>\r\n - -The server terminates this list with the line - -END\r\n - -The slabclass aligns with class ids used by the "stats slabs" command. Where -"stats slabs" describes size and memory usage, "stats items" shows higher -level information. - -The following item values are defined as of writing. - -Name Meaning ------------------------------- -number Number of items presently stored in this class. Expired - items are not automatically excluded. -age Age of the oldest item in the LRU. -evicted Number of times an item had to be evicted from the LRU - before it expired. -evicted_nonzero Number of times an item which had an explicit expire - time set had to be evicted from the LRU before it - expired. -evicted_time Seconds since the last access for the most recent item - evicted from this class. Use this to judge how - recently active your evicted data is. -outofmemory Number of times the underlying slab class was unable to - store a new item. This means you are running with -M or - an eviction failed. -tailrepairs Number of times we self-healed a slab with a refcount - leak. If this counter is increasing a lot, please - report your situation to the developers. - -Note this will only display information about slabs which exist, so an empty -cache will return an empty set. - - -Item size statistics --------------------- -CAVEAT: This section describes statistics which are subject to change in the -future. - -The "stats" command with the argument of "sizes" returns information about the -general size and count of all items stored in the cache. -WARNING: This command WILL lock up your cache! It iterates over *every item* -and examines the size. While the operation is fast, if you have many items -you could prevent memcached from serving requests for several seconds. - -The data is returned in the following format: - -<size> <count>\r\n - -The server terminates this list with the line - -END\r\n - -'size' is an approximate size of the item, within 32 bytes. -'count' is the amount of items that exist within that 32-byte range. - -This is essentially a display of all of your items if there was a slab class -for every 32 bytes. You can use this to determine if adjusting the slab growth -factor would save memory overhead. For example: generating more classes in the -lower range could allow items to fit more snugly into their slab classes, if -most of your items are less than 200 bytes in size. - - -Slab statistics ---------------- -CAVEAT: This section describes statistics which are subject to change in the -future. - -The "stats" command with the argument of "slabs" returns information about -each of the slabs created by memcached during runtime. This includes per-slab -information along with some totals. The data is returned in the format: - -STAT <slabclass>:<stat> <value>\r\n -STAT <stat> <value>\r\n - -The server terminates this list with the line - -END\r\n - -|-----------------+----------------------------------------------------------| -| Name | Meaning | -|-----------------+----------------------------------------------------------| -| chunk_size | The amount of space each chunk uses. One item will use | -| | one chunk of the appropriate size. | -| chunks_per_page | How many chunks exist within one page. A page by | -| | default is one megabyte in size. Slabs are allocated per | -| | page, then broken into chunks. | -| total_pages | Total number of pages allocated to the slab class. | -| total_chunks | Total number of chunks allocated to the slab class. | -| get_hits | Total number of get requests serviced by this class. | -| cmd_set | Total number of set requests storing data in this class. | -| delete_hits | Total number of successful deletes from this class. | -| incr_hits | Total number of incrs modifying this class. | -| decr_hits | Total number of decrs modifying this class. | -| cas_hits | Total number of CAS commands modifying this class. | -| cas_badval | Total number of CAS commands that failed to modify a | -| | value due to a bad CAS id. | -| used_chunks | How many chunks have been allocated to items. | -| free_chunks | Chunks not yet allocated to items, or freed via delete. | -| free_chunks_end | Number of free chunks at the end of the last allocated | -| | page. | -| mem_requested | Number of bytes requested to be stored in this slab[*]. | -| active_slabs | Total number of slab classes allocated. | -| total_malloced | Total amount of memory allocated to slab pages. | -|-----------------+----------------------------------------------------------| - -* Items are stored in a slab that is the same size or larger than the - item. mem_requested shows the size of all items within a - slab. (total_pages * 1MB) - mem_requested shows memory wasted in a - slab class. If you see a lot of waste, consider tuning the slab - factor. - -Other commands --------------- - -"flush_all" is a command with an optional numeric argument. It always -succeeds, and the server sends "OK\r\n" in response (unless "noreply" -is given as the last parameter). Its effect is to invalidate all -existing items immediately (by default) or after the expiration -specified. After invalidation none of the items will be returned in -response to a retrieval command (unless it's stored again under the -same key *after* flush_all has invalidated the items). flush_all -doesn't actually free all the memory taken up by existing items; that -will happen gradually as new items are stored. The most precise -definition of what flush_all does is the following: it causes all -items whose update time is earlier than the time at which flush_all -was set to be executed to be ignored for retrieval purposes. - -The intent of flush_all with a delay, was that in a setting where you -have a pool of memcached servers, and you need to flush all content, -you have the option of not resetting all memcached servers at the -same time (which could e.g. cause a spike in database load with all -clients suddenly needing to recreate content that would otherwise -have been found in the memcached daemon). - -The delay option allows you to have them reset in e.g. 10 second -intervals (by passing 0 to the first, 10 to the second, 20 to the -third, etc. etc.). - - -"version" is a command with no arguments: - -version\r\n - -In response, the server sends - -"VERSION <version>\r\n", where <version> is the version string for the -server. - -"verbosity" is a command with a numeric argument. It always succeeds, -and the server sends "OK\r\n" in response (unless "noreply" is given -as the last parameter). Its effect is to set the verbosity level of -the logging output. - -"quit" is a command with no arguments: - -quit\r\n - -Upon receiving this command, the server closes the -connection. However, the client may also simply close the connection -when it no longer needs it, without issuing this command. - - -UDP protocol ------------- - -For very large installations where the number of clients is high enough -that the number of TCP connections causes scaling difficulties, there is -also a UDP-based interface. The UDP interface does not provide guaranteed -delivery, so should only be used for operations that aren't required to -succeed; typically it is used for "get" requests where a missing or -incomplete response can simply be treated as a cache miss. - -Each UDP datagram contains a simple frame header, followed by data in the -same format as the TCP protocol described above. In the current -implementation, requests must be contained in a single UDP datagram, but -responses may span several datagrams. (The only common requests that would -span multiple datagrams are huge multi-key "get" requests and "set" -requests, both of which are more suitable to TCP transport for reliability -reasons anyway.) - -The frame header is 8 bytes long, as follows (all values are 16-bit integers -in network byte order, high byte first): - -0-1 Request ID -2-3 Sequence number -4-5 Total number of datagrams in this message -6-7 Reserved for future use; must be 0 - -The request ID is supplied by the client. Typically it will be a -monotonically increasing value starting from a random seed, but the client -is free to use whatever request IDs it likes. The server's response will -contain the same ID as the incoming request. The client uses the request ID -to differentiate between responses to outstanding requests if there are -several pending from the same server; any datagrams with an unknown request -ID are probably delayed responses to an earlier request and should be -discarded. - -The sequence number ranges from 0 to n-1, where n is the total number of -datagrams in the message. The client should concatenate the payloads of the -datagrams for a given response in sequence number order; the resulting byte -stream will contain a complete response in the same format as the TCP -protocol (including terminating \r\n sequences). diff --git a/third_party/memcached/doc/readme.txt b/third_party/memcached/doc/readme.txt deleted file mode 100644 index 6a9d0c8d1f3f388687d04bb123b348600d1d67fa..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/readme.txt +++ /dev/null @@ -1 +0,0 @@ -To build the documentation you need xml2rfc ( http://xml.resource.org/ ). diff --git a/third_party/memcached/doc/threads.txt b/third_party/memcached/doc/threads.txt deleted file mode 100644 index 8cd28c5cb50f05441f5db3fb20a1cf24cafcf0d6..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/threads.txt +++ /dev/null @@ -1,68 +0,0 @@ -Multithreading support in memcached - -OVERVIEW - -By default, memcached is compiled as a single-threaded application. This is -the most CPU-efficient mode of operation, and it is appropriate for memcached -instances running on single-processor servers or whose request volume is -low enough that available CPU power is not a bottleneck. - -More heavily-used memcached instances can benefit from multithreaded mode. -To enable it, use the "--enable-threads" option to the configure script: - -./configure --enable-threads - -You must have the POSIX thread functions (pthread_*) on your system in order -to use memcached's multithreaded mode. - -Once you have a thread-capable memcached executable, you can control the -number of threads using the "-t" option; the default is 4. On a machine -that's dedicated to memcached, you will typically want one thread per -processor core. Due to memcached's nonblocking architecture, there is no -real advantage to using more threads than the number of CPUs on the machine; -doing so will increase lock contention and is likely to degrade performance. - - -INTERNALS - -The threading support is mostly implemented as a series of wrapper functions -that protect calls to underlying code with one of a small number of locks. -In single-threaded mode, the wrappers are replaced with direct invocations -of the target code using #define; that is done in memcached.h. This approach -allows memcached to be compiled in either single- or multi-threaded mode. - -Each thread has its own instance of libevent ("base" in libevent terminology). -The only direct interaction between threads is for new connections. One of -the threads handles the TCP listen socket; each new connection is passed to -a different thread on a round-robin basis. After that, each thread operates -on its set of connections as if it were running in single-threaded mode, -using libevent to manage nonblocking I/O as usual. - -UDP requests are a bit different, since there is only one UDP socket that's -shared by all clients. The UDP socket is monitored by all of the threads. -When a datagram comes in, all the threads that aren't already processing -another request will receive "socket readable" callbacks from libevent. -Only one thread will successfully read the request; the others will go back -to sleep or, in the case of a very busy server, will read whatever other -UDP requests are waiting in the socket buffer. Note that in the case of -moderately busy servers, this results in increased CPU consumption since -threads will constantly wake up and find no input waiting for them. But -short of much more major surgery on the I/O code, this is not easy to avoid. - - -TO DO - -The locking is currently very coarse-grained. There is, for example, one -lock that protects all the calls to the hashtable-related functions. Since -memcached spends much of its CPU time on command parsing and response -assembly, rather than managing the hashtable per se, this is not a huge -bottleneck for small numbers of processors. However, the locking will likely -have to be refined in the event that memcached needs to run well on -massively-parallel machines. - -One cheap optimization to reduce contention on that lock: move the hash value -computation so it occurs before the lock is obtained whenever possible. -Right now the hash is performed at the lowest levels of the functions in -assoc.c. If instead it was computed in memcached.c, then passed along with -the key and length into the items.c code and down into assoc.c, that would -reduce the amount of time each thread needs to keep the hashtable lock held. diff --git a/third_party/memcached/doc/xml2rfc/reference.RFC.0768.xml b/third_party/memcached/doc/xml2rfc/reference.RFC.0768.xml deleted file mode 100644 index 4452c347807e26e9e30f38234170b16400eb9cdd..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/xml2rfc/reference.RFC.0768.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> - -<reference anchor='RFC0768'> - -<front> -<title>User Datagram Protocol</title> -<author initials='J.' surname='Postel' fullname='J. Postel'> -<organization>University of Southern California (USC)/Information Sciences Institute</organization> -<address> -<postal> -<street>4676 Admiralty Way</street> -<city>Marina del Rey</city> -<region>CA</region> -<code>90291</code> -<country>US</country></postal> -<phone>+1 213 822 1511</phone></address></author> -<date year='1980' day='28' month='August' /></front> - -<seriesInfo name='STD' value='6' /> -<seriesInfo name='RFC' value='768' /> -<format type='TXT' octets='5896' target='ftp://ftp.isi.edu/in-notes/rfc768.txt' /> -</reference> diff --git a/third_party/memcached/doc/xml2rfc/rfc2629-noinc.xsl b/third_party/memcached/doc/xml2rfc/rfc2629-noinc.xsl deleted file mode 100644 index 99b73a84b51f116283f64ffc13e82ca9710e736a..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/xml2rfc/rfc2629-noinc.xsl +++ /dev/null @@ -1,106 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - version="1.0"> - - <xsl:output method="xml"/> - - <xsl:template name='noinc'> - <xsl:apply-templates mode='noinc'/> - </xsl:template> - - <xsl:template match="*" mode='noinc'> - <xsl:copy> - <xsl:apply-templates select='@*' mode='noinc'/> - <xsl:apply-templates mode='noinc'/> - </xsl:copy> - </xsl:template> - <xsl:template match='@*' mode='noinc'> - <xsl:attribute name='{name()}'> - <xsl:value-of select='.'/> - </xsl:attribute> - </xsl:template> - - <xsl:template match='processing-instruction("rfc")' mode='noinc'> - <xsl:choose> - <xsl:when test='substring-before(.,"=") = "include"'> - <xsl:call-template name='include-pi'> - <xsl:with-param name='include-href'> - <xsl:value-of select="translate( substring-after( ., '=' ), '" ', '' )"/><xsl:text>.xml</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:when> - <xsl:otherwise> - <xsl:copy-of select='.'/> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template name='include-pi'> - <xsl:param name='include-href'/> - <xsl:apply-templates select="document( $include-href )" mode='noinc'/> - </xsl:template> - - <xsl:template match='dwdrfc-ref' mode='noinc'> - <xsl:param name='include-href'> - <xsl:choose> - <xsl:when test='starts-with( @src, "http://" )'> - <xsl:value-of select='@src'/> - </xsl:when> - <xsl:otherwise> - <xsl:text>http://xml.resource.org/public/rfc/</xsl:text> - <xsl:value-of select='@src'/> - <xsl:text>.xml</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:param> - <reference anchor="{@anchor}"> - <xsl:apply-templates select="document( $include-href )" mode="refrename"/> - </reference> - </xsl:template> - - <xsl:template match='*' mode='refrename'> - <xsl:apply-templates mode='refrename'/> - </xsl:template> - - <xsl:template match='reference' mode='refrename'> - <xsl:apply-templates mode='noinc'/> - </xsl:template> - - <xsl:template match='/'> - <xsl:call-template name='noinc'/> - </xsl:template> - - <xsl:template name='output'> - <xsl:param name='foo'/> - <xsl:copy-of select='$foo'/> - <xsl:apply-templates select='$foo'/> - </xsl:template> - - <xsl:template match='*' mode='output'> - <element> - <xsl:value-of select='name()'/> - <xsl:apply-templates mode='output'/> - </element> - </xsl:template> - <xsl:template match='text()' mode='output'/> - - <!-- Reference checking attributes stripped here. --> - <xsl:template match='references' mode='noinc'> - <xsl:element name='references'> - <xsl:attribute name='title'> - <xsl:value-of select='@title'/> - </xsl:attribute> - <xsl:apply-templates mode='noinc'/> - </xsl:element> - </xsl:template> - - <xsl:template match='xref' mode='noinc'> - <xsl:element name='xref'> - <xsl:attribute name='target'> - <xsl:value-of select='@target'/> - </xsl:attribute> - <xsl:apply-templates mode='noinc'/> - </xsl:element> - </xsl:template> - -</xsl:stylesheet> diff --git a/third_party/memcached/doc/xml2rfc/rfc2629-other.ent b/third_party/memcached/doc/xml2rfc/rfc2629-other.ent deleted file mode 100644 index 0da80b728d9bcbc1a79558ad8abbab37b111ca4f..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/xml2rfc/rfc2629-other.ent +++ /dev/null @@ -1,61 +0,0 @@ -<!-- rfc2629-other.ent - - Character entity set for RFC-2629 source xml documents. - There is no need to invoke this directly from - the source document itself; just invoke the DTD. - - These are unknown to (X)HTML, so any converter to these - formats must either substitute these entities - or invoke this file from the output file. - - Conversion to txt or nroff format will replace - these entities by the parenthesized text. - - Typical invocation: - <!ENTITY % rfc2629-other - PUBLIC "-//IETF//ENTITIES Other for RFC 2629//EN" - "http://xml.resource.org/authoring/rfc2629-other.ent"> - %rfc2629-other; ---> - -<!-- Magical --> -<!-- rfc.number (automatically expanded to content - of number="..." attribute - of <rfc> element, or to "XXXX") --> - -<!-- ASCII --> -<!ENTITY excl "!"><!-- U+0021 EXCLAMATION MARK ("!") --> -<!ENTITY num "#"><!-- U+0023 NUMBER SIGN ("#") --> -<!ENTITY dollar "$"><!-- U+0024 DOLLAR SIGN ("$") --> -<!ENTITY percnt "%"><!-- U+0025 PERCENT SIGN ("%") --> -<!ENTITY lpar "("><!-- U+0028 LEFT PARENTHESIS ("(") --> -<!ENTITY rpar ")"><!-- U+0029 RIGHT PARENTHESIS (")") --> -<!ENTITY ast "*"><!-- U+002A ASTERISK ("*") --> -<!ENTITY plus "+"><!-- U+002B PLUS SIGN ("+") --> -<!ENTITY comma ","><!-- U+002C COMMA (",") --> -<!ENTITY hyphen "-"><!-- U+002D HYPHEN-MINUS ("-") --> -<!ENTITY period "."><!-- U+002E FULL STOP (".") --> -<!ENTITY sol "/"><!-- U+002F SOLIDUS ("/") --> -<!ENTITY colon ":"><!-- U+003A COLON (":") --> -<!ENTITY semi ";"><!-- U+003B SEMICOLON (";") --> -<!ENTITY equals "="><!-- U+003D EQUALS SIGN ("=") --> -<!ENTITY quest "?"><!-- U+003F QUESTION MARK ("?") --> -<!ENTITY commat "@"><!-- U+0040 COMMERCIAL AT ("@") --> -<!ENTITY lsqb "["><!-- U+005B LEFT SQUARE BRACKET ("[") --> -<!ENTITY bsol "\"><!-- U+005C REVERSE SOLIDUS ("\\") --> -<!ENTITY rsqb "]"><!-- U+005D RIGHT SQUARE BRACKET ("]") --> -<!ENTITY circ "^"><!-- U+005E CIRCUMFLEX ACCENT ("^") --> -<!ENTITY lowbar "_"><!-- U+005F LOW LINE ("_") --> -<!ENTITY grave "`"><!-- U+0060 GRAVE ACCENT ("`") --> -<!ENTITY lcub "{"><!-- U+007B LEFT CURLY BRACKET ("{") --> -<!ENTITY verbar "|"><!-- U+007C VERTICAL LINE ("|") --> -<!ENTITY rcub "}"><!-- U+007D RIGHT CURLY BRACKET ("}") --> - -<!-- Useful Unicode --> -<!ENTITY Zcaron "Ž"><!-- U+017D LATIN CAPITAL LETTER Z WITH CARON ("Z") --> -<!ENTITY zcaron "ž"><!-- U+017E LATIN SMALL LETTER Z WITH CARON ("z") --> -<!ENTITY dash "‐"><!-- U+2010 HYPHEN ("-") --> -<!ENTITY nbhy "‑"><!-- U+2011 NON-BREAKING HYPHEN (special "-") --> -<!ENTITY wj "⁠"><!-- U+2060 WORD JOINER (special "") --> - -<!-- EOF --> diff --git a/third_party/memcached/doc/xml2rfc/rfc2629-refchk.xsl b/third_party/memcached/doc/xml2rfc/rfc2629-refchk.xsl deleted file mode 100644 index 0cea58e933a114ab429e2cd2ca9ea6580b042aea..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/xml2rfc/rfc2629-refchk.xsl +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - version="1.0"> - - <xsl:output method="xml"/> - - <xsl:template match='/'> - <refcheck> - <xsl:apply-templates select='//xref' mode='missing'/> - <xsl:apply-templates select='//reference' mode='orphans'/> - <xsl:apply-templates select='//references[@dwdrfc-type = "norm"]' mode='normcheck'/> - <xsl:apply-templates select='//xref[@dwdrfc-type = "norm"]' mode='normrefs'/> - </refcheck> - </xsl:template> - - <xsl:template match='xref' mode='missing'> - <xsl:param name='refname'> - <xsl:value-of select='@target'/> - </xsl:param> - <xsl:param name='reftgt'> - <xsl:value-of select='//*[@anchor = $refname]/@anchor'/> - </xsl:param> - <xsl:choose> - <xsl:when test='$reftgt = $refname'/> - <xsl:otherwise> - <missing><xsl:value-of select='$refname'/></missing><xsl:text> - </xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match='xref' mode='normrefs'> - <xsl:param name='refname'> - <xsl:value-of select='@target'/> - </xsl:param> - <xsl:param name='reftgt'> - <xsl:value-of select='//references[@dwdrfc-type = "norm"]/*[@anchor = $refname]/@anchor'/> - </xsl:param> - <xsl:choose> - <xsl:when test='$reftgt = $refname'/> - <xsl:otherwise> - <missing-norm><xsl:value-of select='$refname'/></missing-norm><xsl:text> - </xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match='reference' mode='orphans'> - <xsl:param name='refname'> - <xsl:value-of select='@anchor'/> - </xsl:param> - <xsl:param name='reftgt'> - <xsl:value-of select='//xref[@target = $refname]/@target'/> - </xsl:param> - <xsl:if test='$reftgt != $refname'> - <orphan><xsl:value-of select='$refname'/></orphan><xsl:text> - </xsl:text> - </xsl:if> -</xsl:template> - -<xsl:template match='references' mode='normcheck'> - <xsl:apply-templates mode='normcheck'/> -</xsl:template> - -<xsl:template match='*' mode='normcheck'> - <!-- Need to find at least one normative reference --> - <xsl:param name='refname'> - <xsl:value-of select='@anchor'/> - </xsl:param> - <xsl:param name='reftgt'> - <xsl:value-of select='//xref[@dwdrfc-type = "norm" and @target = $refname]/@target'/> - </xsl:param> - <xsl:if test='$refname != $reftgt'> - <normchk><xsl:value-of select='$refname'/></normchk><xsl:text> -</xsl:text> - </xsl:if> -</xsl:template> - -<xsl:template match='text()' mode='normcheck'/> - -</xsl:stylesheet> diff --git a/third_party/memcached/doc/xml2rfc/rfc2629-xhtml.ent b/third_party/memcached/doc/xml2rfc/rfc2629-xhtml.ent deleted file mode 100644 index 3d4a07dd6ebe8ecb23535cf20b66dc16afe43991..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/xml2rfc/rfc2629-xhtml.ent +++ /dev/null @@ -1,165 +0,0 @@ -<!-- rfc2629-xhtml.ent - - Character entity set for RFC-2629 source xml documents. - There is no need to invoke this directly from - the source document itself; just invoke the DTD. - - These are known to (X)HTML, so any converter to these - formats can just leave them as is without having - to invoke this file from the output file. - - Conversion to txt or nroff format will replace - these entities by the parenthesized text. - - Typical invocation: - <!ENTITY % rfc2629-xhtml - PUBLIC "-//IETF//ENTITIES XHTML subset for RFC 2629//EN" - "http://xml.resource.org/authoring/rfc2629-xhtml.ent"> - %rfc2629-xhtml; ---> - -<!-- All of ISO Latin 1 --> -<!ENTITY nbsp " "><!-- U+00A0 NO-BREAK SPACE (special " ") --> -<!ENTITY iexcl "¡"><!-- U+00A1 INVERTED EXCLAMATION MARK ("!") --> -<!ENTITY cent "¢"><!-- U+00A2 CENT SIGN ("[cents]") --> -<!ENTITY pound "£"><!-- U+00A3 POUND SIGN ("GBP") --> -<!ENTITY curren "¤"><!-- U+00A4 CURRENCY SIGN ("[currency units]") --> -<!ENTITY yen "¥"><!-- U+00A5 YEN SIGN ("JPY") --> -<!ENTITY brvbar "¦"><!-- U+00A6 BROKEN BAR ("|") --> -<!ENTITY sect "§"><!-- U+00A7 SECTION SIGN ("S.") --> -<!ENTITY uml "¨"><!-- U+00A8 DIAERESIS ('"') --> -<!ENTITY copy "©"><!-- U+00A9 COPYRIGHT SIGN ("(C)") --> -<!ENTITY ordf "ª"><!-- U+00AA FEMININE ORDINAL INDICATOR ("a") --> -<!ENTITY laquo "«"><!-- U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK ("<<") --> -<!ENTITY not "¬"><!-- U+00AC NOT SIGN ("[not]") --> -<!ENTITY shy "­"><!-- U+00AD SOFT HYPHEN (ignored "") --> -<!ENTITY reg "®"><!-- U+00AE REGISTERED SIGN ("(R)") --> -<!ENTITY macr "¯"><!-- U+00AF MACRON ("_") --> -<!ENTITY deg "°"><!-- U+00B0 DEGREE SIGN ("o") --> -<!ENTITY plusmn "±"><!-- U+00B1 PLUS-MINUS SIGN ("+/-") --> -<!ENTITY sup2 "²"><!-- U+00B2 SUPERSCRIPT TWO ("^2") --> -<!ENTITY sup3 "³"><!-- U+00B3 SUPERSCRIPT THREE ("^3") --> -<!ENTITY acute "´"><!-- U+00B4 ACUTE ACCENT ("'") --> -<!ENTITY micro "µ"><!-- U+00B5 MICRO SIGN ("[micro]") --> -<!ENTITY para "¶"><!-- U+00B6 PILCROW SIGN ("P.") --> -<!ENTITY middot "·"><!-- U+00B7 MIDDLE DOT (".") --> -<!ENTITY cedil "¸"><!-- U+00B8 CEDILLA (",") --> -<!ENTITY sup1 "¹"><!-- U+00B9 SUPERSCRIPT ONE ("^1") --> -<!ENTITY ordm "º"><!-- U+00BA MASCULINE ORDINAL INDICATOR ("o") --> -<!ENTITY raquo "»"><!-- U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (">>") --> -<!ENTITY frac14 "¼"><!-- U+00BC VULGAR FRACTION ONE QUARTER ("1/4") --> -<!ENTITY frac12 "½"><!-- U+00BD VULGAR FRACTION ONE HALF ("1/2") --> -<!ENTITY frac34 "¾"><!-- U+00BE VULGAR FRACTION THREE QUARTERS ("3/4") --> -<!ENTITY iquest "¿"><!-- U+00BF INVERTED QUESTION MARK ("?") --> -<!ENTITY Agrave "À"><!-- U+00C0 LATIN CAPITAL LETTER A WITH GRAVE ("A") --> -<!ENTITY Aacute "Á"><!-- U+00C1 LATIN CAPITAL LETTER A WITH ACUTE ("A") --> -<!ENTITY Acirc "Â"><!-- U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX ("A") --> -<!ENTITY Atilde "Ã"><!-- U+00C3 LATIN CAPITAL LETTER A WITH TILDE ("A") --> -<!ENTITY Auml "Ä"><!-- U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS ("Ae") --> -<!ENTITY Aring "Å"><!-- U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE ("Ae") --> -<!ENTITY AElig "Æ"><!-- U+00C6 LATIN CAPITAL LETTER AE ("AE") --> -<!ENTITY Ccedil "Ç"><!-- U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA ("C") --> -<!ENTITY Egrave "È"><!-- U+00C8 LATIN CAPITAL LETTER E WITH GRAVE ("E") --> -<!ENTITY Eacute "É"><!-- U+00C9 LATIN CAPITAL LETTER E WITH ACUTE ("E") --> -<!ENTITY Ecirc "Ê"><!-- U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX ("E") --> -<!ENTITY Euml "Ë"><!-- U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS ("E") --> -<!ENTITY Igrave "Ì"><!-- U+00CC LATIN CAPITAL LETTER I WITH GRAVE ("I") --> -<!ENTITY Iacute "Í"><!-- U+00CD LATIN CAPITAL LETTER I WITH ACUTE ("I") --> -<!ENTITY Icirc "Î"><!-- U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX ("I") --> -<!ENTITY Iuml "Ï"><!-- U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS ("I") --> -<!ENTITY ETH "Ð"><!-- U+00D0 LATIN CAPITAL LETTER ETH ("[ETH]") --> -<!ENTITY Ntilde "Ñ"><!-- U+00D1 LATIN CAPITAL LETTER N WITH TILDE ("N") --> -<!ENTITY Ograve "Ò"><!-- U+00D2 LATIN CAPITAL LETTER O WITH GRAVE ("O") --> -<!ENTITY Oacute "Ó"><!-- U+00D3 LATIN CAPITAL LETTER O WITH ACUTE ("O") --> -<!ENTITY Ocirc "Ô"><!-- U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX ("O") --> -<!ENTITY Otilde "Õ"><!-- U+00D5 LATIN CAPITAL LETTER O WITH TILDE ("O") --> -<!ENTITY Ouml "Ö"><!-- U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS ("Oe") --> -<!ENTITY times "×"><!-- U+00D7 MULTIPLICATION SIGN ("x") --> -<!ENTITY Oslash "Ø"><!-- U+00D8 LATIN CAPITAL LETTER O WITH STROKE ("Oe") --> -<!ENTITY Ugrave "Ù"><!-- U+00D9 LATIN CAPITAL LETTER U WITH GRAVE ("U") --> -<!ENTITY Uacute "Ú"><!-- U+00DA LATIN CAPITAL LETTER U WITH ACUTE ("U") --> -<!ENTITY Ucirc "Û"><!-- U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX ("U") --> -<!ENTITY Uuml "Ü"><!-- U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS ("Ue") --> -<!ENTITY Yacute "Ý"><!-- U+00DD LATIN CAPITAL LETTER Y WITH ACUTE ("Y") --> -<!ENTITY THORN "Þ"><!-- U+00DE LATIN CAPITAL LETTER THORN ("[THORN]") --> -<!ENTITY szlig "ß"><!-- U+00DF LATIN SMALL LETTER SHARP S ("ss") --> -<!ENTITY agrave "à"><!-- U+00E0 LATIN SMALL LETTER A WITH GRAVE ("a") --> -<!ENTITY aacute "á"><!-- U+00E1 LATIN SMALL LETTER A WITH ACUTE ("a") --> -<!ENTITY acirc "â"><!-- U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX ("a") --> -<!ENTITY atilde "ã"><!-- U+00E3 LATIN SMALL LETTER A WITH TILDE ("a") --> -<!ENTITY auml "ä"><!-- U+00E4 LATIN SMALL LETTER A WITH DIAERESIS ("ae") --> -<!ENTITY aring "å"><!-- U+00E5 LATIN SMALL LETTER A WITH RING ABOVE ("ae") --> -<!ENTITY aelig "æ"><!-- U+00E6 LATIN SMALL LETTER AE ("ae") --> -<!ENTITY ccedil "ç"><!-- U+00E7 LATIN SMALL LETTER C WITH CEDILLA ("c") --> -<!ENTITY egrave "è"><!-- U+00E8 LATIN SMALL LETTER E WITH GRAVE ("e") --> -<!ENTITY eacute "é"><!-- U+00E9 LATIN SMALL LETTER E WITH ACUTE ("e") --> -<!ENTITY ecirc "ê"><!-- U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX ("e") --> -<!ENTITY euml "ë"><!-- U+00EB LATIN SMALL LETTER E WITH DIAERESIS ("e") --> -<!ENTITY igrave "ì"><!-- U+00EC LATIN SMALL LETTER I WITH GRAVE ("i") --> -<!ENTITY iacute "í"><!-- U+00ED LATIN SMALL LETTER I WITH ACUTE ("i") --> -<!ENTITY icirc "î"><!-- U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX ("i") --> -<!ENTITY iuml "ï"><!-- U+00EF LATIN SMALL LETTER I WITH DIAERESIS ("i") --> -<!ENTITY eth "ð"><!-- U+00F0 LATIN SMALL LETTER ETH ("[eth]") --> -<!ENTITY ntilde "ñ"><!-- U+00F1 LATIN SMALL LETTER N WITH TILDE ("n") --> -<!ENTITY ograve "ò"><!-- U+00F2 LATIN SMALL LETTER O WITH GRAVE ("o") --> -<!ENTITY oacute "ó"><!-- U+00F3 LATIN SMALL LETTER O WITH ACUTE ("o") --> -<!ENTITY ocirc "ô"><!-- U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX ("o") --> -<!ENTITY otilde "õ"><!-- U+00F5 LATIN SMALL LETTER O WITH TILDE ("o") --> -<!ENTITY ouml "ö"><!-- U+00F6 LATIN SMALL LETTER O WITH DIAERESIS ("oe") --> -<!ENTITY divide "÷"><!-- U+00F7 DIVISION SIGN ("/") --> -<!ENTITY oslash "ø"><!-- U+00F8 LATIN SMALL LETTER O WITH STROKE ("oe") --> -<!ENTITY ugrave "ù"><!-- U+00F9 LATIN SMALL LETTER U WITH GRAVE ("u") --> -<!ENTITY uacute "ú"><!-- U+00FA LATIN SMALL LETTER U WITH ACUTE ("u") --> -<!ENTITY ucirc "û"><!-- U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX ("u") --> -<!ENTITY uuml "ü"><!-- U+00FC LATIN SMALL LETTER U WITH DIAERESIS ("ue") --> -<!ENTITY yacute "ý"><!-- U+00FD LATIN SMALL LETTER Y WITH ACUTE ("y") --> -<!ENTITY thorn "þ"><!-- U+00FE LATIN SMALL LETTER THORN ("[thorn]") --> -<!ENTITY yuml "ÿ"><!-- U+00FF LATIN SMALL LETTER Y WITH DIAERESIS ("y") --> - -<!-- Some of ISO Latin 9 and 10 --> -<!ENTITY OElig "Œ"><!-- U+0152 LATIN CAPITAL LIGATURE OE ("OE") --> -<!ENTITY oelig "œ"><!-- U+0153 LATIN SMALL LIGATURE OE ("oe") --> -<!ENTITY Scaron "Š"><!-- U+0160 LATIN CAPITAL LETTER S WITH CARON ("S") --> -<!ENTITY scaron "š"><!-- U+0161 LATIN SMALL LETTER S WITH CARON ("s") --> -<!ENTITY Yuml "Ÿ"><!-- U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS ("Y") --> - -<!-- Other Unicode (including some characters from the windows-1252 repertoire) --> -<!ENTITY fnof "ƒ"><!-- U+0192 LATIN SMALL LETTER F WITH HOOK ("f") --> -<!ENTITY tilde "˜"><!-- U+02DC SMALL TILDE ("~") --> -<!ENTITY ensp " "><!-- U+2002 EN SPACE (" ") --> -<!ENTITY emsp " "><!-- U+2003 EM SPACE (" ") --> -<!ENTITY thinsp " "><!-- U+2009 THIN SPACE (" ") --> -<!ENTITY ndash "–"><!-- U+2013 EN DASH ("-") --> -<!ENTITY mdash "—"><!-- U+2014 EM DASH ("-\u002D") --> -<!ENTITY lsquo "‘"><!-- U+2018 LEFT SINGLE QUOTATION MARK ("'") --> -<!ENTITY rsquo "’"><!-- U+2019 RIGHT SINGLE QUOTATION MARK ("'") --> -<!ENTITY sbquo "‚"><!-- U+201A SINGLE LOW-9 QUOTATION MARK ("'") --> -<!ENTITY ldquo "“"><!-- U+201C LEFT DOUBLE QUOTATION MARK ('"') --> -<!ENTITY rdquo "”"><!-- U+201D RIGHT DOUBLE QUOTATION MARK ('"') --> -<!ENTITY bdquo "„"><!-- U+201E DOUBLE LOW-9 QUOTATION MARK ('"') --> -<!ENTITY dagger "†"><!-- U+2020 DAGGER ("*!*") --> -<!ENTITY Dagger "‡"><!-- U+2021 DOUBLE DAGGER ("*!!*") --> -<!ENTITY bull "•"><!-- U+2022 BULLET ("o") --> -<!ENTITY hellip "…"><!-- U+2026 HORIZONTAL ELLIPSIS ("...") --> -<!ENTITY permil "′"><!-- U+2030 PER MILLE SIGN ("[/1000]") --> -<!ENTITY prime "′"><!-- U+2032 PRIME ("'") --> -<!ENTITY Prime "″"><!-- U+2033 DOUBLE PRIME ('"') --> -<!ENTITY lsaquo "‹"><!-- U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK ("<") --> -<!ENTITY rsaquo "›"><!-- U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (">") --> -<!ENTITY frasl "⁄"><!-- U+2044 FRACTION SLASH ("/") --> -<!ENTITY euro "€"><!-- U+20AC EURO SIGN ("EUR") --> -<!ENTITY trade "™"><!-- U+2122 TRADE MARK SIGN ("[TM]") --> -<!ENTITY larr "←"><!-- U+2190 LEFTWARDS ARROW ("<-\u002D") --> -<!ENTITY rarr "→"><!-- U+2192 RIGHTWARDS ARROW ("\u002D->") --> -<!ENTITY harr "↔"><!-- U+2194 LEFT RIGHT ARROW ("<->") --> -<!ENTITY lArr "⇐"><!-- U+21D0 LEFTWARDS DOUBLE ARROW ("<==") --> -<!ENTITY rArr "⇒"><!-- U+21D2 RIGHTWARDS DOUBLE ARROW ("==>") --> -<!ENTITY hArr "⇔"><!-- U+21D4 LEFT RIGHT DOUBLE ARROW ("<=>") --> -<!ENTITY minus "−"><!-- U+2212 MINUS SIGN ("-") --> -<!ENTITY lowast "∗"><!-- U+2217 ASTERISK OPERATOR ("*") --> -<!ENTITY le "≤"><!-- U+2264 LESS-THAN OR EQUAL TO ("<=") --> -<!ENTITY ge "≥"><!-- U+2265 GREATER-THAN OR EQUAL TO (">=") --> -<!ENTITY lang "〈"><!-- U+2329 LEFT-POINTING ANGLE BRACKET ("<") --> -<!ENTITY rang "〉"><!-- U+232A RIGHT-POINTING ANGLE BRACKET (">") --> - -<!-- EOF --> diff --git a/third_party/memcached/doc/xml2rfc/rfc2629.dtd b/third_party/memcached/doc/xml2rfc/rfc2629.dtd deleted file mode 100644 index bc3026079a576940219e4243004547e431e6814a..0000000000000000000000000000000000000000 --- a/third_party/memcached/doc/xml2rfc/rfc2629.dtd +++ /dev/null @@ -1,304 +0,0 @@ -<!-- - revised DTD for the RFC document series, draft of 2007-03-29 - --> - - -<!-- - Typical invocation: - <!DOCTYPE rfc PUBLIC "-//IETF//DTD RFC 2629//EN" - "http://xml.resource.org/authoring/rfc2629.dtd" [ - ... dtd subset ... - ]> - or - <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ - ... dtd subset ... - ]> - --> - - -<!-- - Contents - - Character entities - - DTD data types - - The top-level - - Front matter - - The Body - - Back matter - --> - - -<!-- - Character entities - --> - - -<!ENTITY % rfc2629-xhtml - PUBLIC "-//IETF//ENTITIES XHTML subset for RFC 2629//EN" - "rfc2629-xhtml.ent"> -%rfc2629-xhtml; - -<!ENTITY % rfc2629-other - PUBLIC "-//IETF//ENTITIES Other for RFC 2629//EN" - "rfc2629-other.ent"> -%rfc2629-other; - - -<!-- - DTD data types: - - entity description - ====== =============================================== - NUMBER [0-9]+ - NUMBERS a comma-separated list of NUMBER - - DAY the day of the month, e.g., "1" - MONTH the month of the year, e.g., "January" - YEAR a four-digit year, e.g., "1999" - - URI e.g., "http://invisible.net/" - - ATEXT/CTEXT printable ASCII text (no line-terminators) - - TEXT character data - --> - - -<!ENTITY % NUMBER "CDATA"> -<!ENTITY % NUMBERS "CDATA"> - -<!ENTITY % DAY "CDATA"> -<!ENTITY % MONTH "CDATA"> -<!ENTITY % YEAR "CDATA"> - -<!ENTITY % URI "CDATA"> - -<!ENTITY % ATEXT "CDATA"> -<!ENTITY % CTEXT "#PCDATA"> - -<!ENTITY % TEXT "#PCDATA"> - -<!ENTITY rfc.number "XXXX"> - - -<!-- - The top-level - --> - - -<!-- - attributes for the "rfc" element are supplied by the RFC - editor. when preparing drafts, authors should leave them blank. - - the "seriesNo" attribute is used if the category is, e.g., BCP. - --> -<!ELEMENT rfc (front,middle,back?)> -<!ATTLIST rfc - number %NUMBER; #IMPLIED - obsoletes %NUMBERS; "" - updates %NUMBERS; "" - category (std|bcp|info|exp|historic) - #IMPLIED - seriesNo %NUMBER; #IMPLIED - ipr (full2026|noDerivativeWorks2026|none - |full3667|noModification3667|noDerivatives3667 - |full3978|noModification3978|noDerivatives3978) - #IMPLIED - iprExtract IDREF #IMPLIED - submissionType - (IETF|independent) "IETF" - docName %ATEXT; #IMPLIED - xml:lang %ATEXT; "en"> - - -<!-- - Front matter - --> - - -<!ELEMENT front (title,author+,date,area*,workgroup*,keyword*, - abstract?,note*)> - -<!-- the "abbrev" attribute is used for headers, etc. --> -<!ELEMENT title (%CTEXT;)> -<!ATTLIST title - abbrev %ATEXT; #IMPLIED> - -<!ELEMENT author (organization,address?)> -<!ATTLIST author - initials %ATEXT; #IMPLIED - surname %ATEXT; #IMPLIED - fullname %ATEXT; #IMPLIED - role (editor) #IMPLIED> - -<!ELEMENT organization - (%CTEXT;)> -<!ATTLIST organization - abbrev %ATEXT; #IMPLIED> - -<!ELEMENT address (postal?,phone?,facsimile?,email?,uri?)> - -<!-- this content model should be more strict: - at most one of each the city, region, code, and country - elements may be present --> -<!ELEMENT postal (street+,(city|region|code|country)*)> -<!ELEMENT street (%CTEXT;)> -<!ELEMENT city (%CTEXT;)> -<!ELEMENT region (%CTEXT;)> -<!ELEMENT code (%CTEXT;)> -<!ELEMENT country (%CTEXT;)> -<!ELEMENT phone (%CTEXT;)> -<!ELEMENT facsimile (%CTEXT;)> -<!ELEMENT email (%CTEXT;)> -<!ELEMENT uri (%CTEXT;)> - -<!ELEMENT date EMPTY> -<!ATTLIST date - day %DAY; #IMPLIED - month %MONTH; #IMPLIED - year %YEAR; #IMPLIED> - -<!-- meta-data... --> -<!ELEMENT area (%CTEXT;)> -<!ELEMENT workgroup (%CTEXT;)> -<!ELEMENT keyword (%CTEXT;)> - -<!ELEMENT abstract (t)+> -<!ELEMENT note (t)+> -<!ATTLIST note - title %ATEXT; #REQUIRED> - - -<!-- - The body - --> - - -<!-- later on, may be (section+,appendix*,section*) --> -<!ELEMENT middle (section+)> - -<!ELEMENT section ((t|figure|texttable|iref)*,section*)> -<!ATTLIST section - anchor ID #IMPLIED - title %ATEXT; #REQUIRED - toc (include|exclude|default) - "default"> - -<!-- -<!ELEMENT appendix ((t|figure|texttable|iref)*,appendix*)> -<!ATTLIST appendix - anchor ID #IMPLIED - title %ATEXT; #REQUIRED - toc (include|exclude|default) - "default"> - --> - -<!-- use of <figure/> is deprecated... --> -<!ELEMENT t (%TEXT;|list|figure|xref|eref|iref|cref|spanx|vspace)*> -<!ATTLIST t - anchor ID #IMPLIED - hangText %ATEXT; #IMPLIED> - -<!-- the value of the style attribute is inherited from the closest - parent --> -<!ELEMENT list (t+)> -<!ATTLIST list - style %ATEXT; #IMPLIED - hangIndent %NUMBER; #IMPLIED - counter %ATEXT; #IMPLIED> - -<!ELEMENT xref (%CTEXT;)> -<!ATTLIST xref - target IDREF #REQUIRED - pageno (true|false) "false" - format (counter|title|none|default) - "default"> - -<!ELEMENT eref (%CTEXT;)> -<!ATTLIST eref - target %URI; #REQUIRED> - -<!ELEMENT iref EMPTY> -<!ATTLIST iref - item %ATEXT; #REQUIRED - subitem %ATEXT; "" - primary (true|false) "false"> - -<!ELEMENT cref (%CTEXT;)> -<!ATTLIST cref - anchor ID #IMPLIED - source %ATEXT; #IMPLIED> - -<!ELEMENT spanx (%CTEXT;)> -<!ATTLIST spanx - style %ATEXT; "emph"> - -<!ELEMENT vspace EMPTY> -<!ATTLIST vspace - blankLines %NUMBER; "0"> - -<!ELEMENT figure (iref*,preamble?,artwork,postamble?)> -<!ATTLIST figure - anchor ID #IMPLIED - title %ATEXT; "" - src %URI; #IMPLIED - align (left|center|right) "left" - alt %ATEXT; "" - width %ATEXT; "" - height %ATEXT; ""> - -<!ELEMENT preamble (%TEXT;|xref|eref|iref|cref|spanx)*> -<!ELEMENT artwork (%TEXT;)*> -<!ATTLIST artwork - xml:space (default|preserve) "preserve" - name %ATEXT; "" - type %ATEXT; "" - src %URI; #IMPLIED - align (left|center|right) "left" - alt %ATEXT; "" - width %ATEXT; "" - height %ATEXT; ""> - -<!ELEMENT postamble (%TEXT;|xref|eref|iref|cref|spanx)*> - -<!ELEMENT texttable (preamble?,ttcol+,c*,postamble?)> -<!ATTLIST texttable - anchor ID #IMPLIED - title %ATEXT; ""> -<!ELEMENT ttcol (%CTEXT;)> -<!ATTLIST ttcol - width %ATEXT; #IMPLIED - align (left|center|right) "left"> -<!ELEMENT c (%TEXT;|xref|eref|iref|cref|spanx)*> - - -<!-- - Back matter - --> - - -<!-- sections, if present, are appendices --> -<!ELEMENT back (references*,section*)> - -<!ELEMENT references (reference+)> -<!ATTLIST references - title %ATEXT; "References"> -<!ELEMENT reference (front,seriesInfo*,format*,annotation*)> -<!ATTLIST reference - anchor ID #IMPLIED - target %URI; #IMPLIED> -<!ELEMENT seriesInfo EMPTY> -<!ATTLIST seriesInfo - name %ATEXT; #REQUIRED - value %ATEXT; #REQUIRED> -<!ELEMENT format EMPTY> -<!ATTLIST format - target %URI; #IMPLIED - type %ATEXT; #REQUIRED - octets %NUMBER; #IMPLIED> -<!ELEMENT annotation (%TEXT;|xref|eref|iref|cref|spanx)*> diff --git a/third_party/memcached/t/64bit.t b/third_party/memcached/t/64bit.t deleted file mode 100755 index 425ff8aa3443732c6a0fdcf6fc0690d1dfbcf0f7..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/64bit.t +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Test::More; -use FindBin qw($Bin); -use lib "$Bin/lib"; -use MemcachedTest; - -$ENV{T_MEMD_INITIAL_MALLOC} = "4294967328"; # 2**32 + 32 , just over 4GB -$ENV{T_MEMD_SLABS_ALLOC} = 0; # don't preallocate slabs - -my $server = new_memcached("-m 4098 -M"); -my $sock = $server->sock; - -my ($stats, $slabs) = @_; - -$stats = mem_stats($sock); - -if ($stats->{'pointer_size'} eq "32") { - plan skip_all => 'Skipping 64-bit tests on 32-bit build'; - exit 0; -} else { - plan tests => 6; -} - -is($stats->{'pointer_size'}, 64, "is 64 bit"); -is($stats->{'limit_maxbytes'}, "4297064448", "max bytes is 4098 MB"); - -$slabs = mem_stats($sock, 'slabs'); -is($slabs->{'total_malloced'}, "4294967328", "expected (faked) value of total_malloced"); -is($slabs->{'active_slabs'}, 0, "no active slabs"); - -my $hit_limit = 0; -for (1..5) { - my $size = 400 * 1024; - my $data = "a" x $size; - print $sock "set big$_ 0 0 $size\r\n$data\r\n"; - my $res = <$sock>; - $hit_limit = 1 if $res ne "STORED\r\n"; -} -ok($hit_limit, "hit size limit"); - -$slabs = mem_stats($sock, 'slabs'); -is($slabs->{'active_slabs'}, 1, "1 active slab"); diff --git a/third_party/memcached/t/binary-get.t b/third_party/memcached/t/binary-get.t deleted file mode 100755 index f57a8a34d888b8e5750f8888c676049e37615894..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/binary-get.t +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Test::More tests => 8; -use FindBin qw($Bin); -use lib "$Bin/lib"; -use MemcachedTest; - -my $server = new_memcached(); -my $sock = $server->sock; - -my $count = 1; - -foreach my $blob ("mooo\0", "mumble\0\0\0\0\r\rblarg", "\0", "\r") { - my $key = "foo$count"; - my $len = length($blob); - print "len is $len\n"; - print $sock "set $key 0 0 $len\r\n$blob\r\n"; - is(scalar <$sock>, "STORED\r\n", "stored $key"); - mem_get_is($sock, $key, $blob); - $count++; -} - diff --git a/third_party/memcached/t/bogus-commands.t b/third_party/memcached/t/bogus-commands.t deleted file mode 100755 index 37680c154b0903ebeaf5a484d95d18d13985b1e2..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/bogus-commands.t +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Test::More tests => 1; -use FindBin qw($Bin); -use lib "$Bin/lib"; -use MemcachedTest; - -my $server = new_memcached(); -my $sock = $server->sock; - -print $sock "boguscommand slkdsldkfjsd\r\n"; -is(scalar <$sock>, "CLIENT_ERROR bad command line format\r\n", "got error back"); diff --git a/third_party/memcached/t/cas.t b/third_party/memcached/t/cas.t deleted file mode 100644 index e04a26a7b6a1649300327bfd604549449d528658..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/cas.t +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Test::More tests => 43; -use FindBin qw($Bin); -use lib "$Bin/lib"; -use MemcachedTest; - - -my $server = new_memcached(); -my $sock = $server->sock; -my $sock2 = $server->new_sock; - -my @result; -my @result2; - -ok($sock != $sock2, "have two different connections open"); - -sub check_args { - my ($line, $name) = @_; - - my $svr = new_memcached(); - my $s = $svr->sock; - - print $s $line; - is(scalar <$s>, "CLIENT_ERROR bad command line format\r\n", $name); - undef $svr; -} - -check_args "cas bad blah 0 0 0\r\n\r\n", "bad flags"; -check_args "cas bad 0 blah 0 0\r\n\r\n", "bad exp"; -check_args "cas bad 0 0 blah 0\r\n\r\n", "bad cas"; -check_args "cas bad 0 0 0 blah\r\n\r\n", "bad size"; - -# gets foo (should not exist) -print $sock "gets foo\r\n"; -is(scalar <$sock>, "END\r\n", "gets failed"); - -# set foo -print $sock "set foo 0 0 6\r\nbarval\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored barval"); - -# gets foo and verify identifier exists -@result = mem_gets($sock, "foo"); -mem_gets_is($sock,$result[0],"foo","barval"); - -# cas fail -print $sock "cas foo 0 0 6 123\r\nbarva2\r\n"; -is(scalar <$sock>, "EXISTS\r\n", "cas failed for foo"); - -# gets foo - success -@result = mem_gets($sock, "foo"); -mem_gets_is($sock,$result[0],"foo","barval"); - -# cas success -print $sock "cas foo 0 0 6 $result[0]\r\nbarva2\r\n"; -is(scalar <$sock>, "STORED\r\n", "cas success, set foo"); - -# cas failure (reusing the same key) -print $sock "cas foo 0 0 6 $result[0]\r\nbarva2\r\n"; -is(scalar <$sock>, "EXISTS\r\n", "reusing a CAS ID"); - -# delete foo -print $sock "delete foo\r\n"; -is(scalar <$sock>, "DELETED\r\n", "deleted foo"); - -# cas missing -print $sock "cas foo 0 0 6 $result[0]\r\nbarva2\r\n"; -is(scalar <$sock>, "NOT_FOUND\r\n", "cas failed, foo does not exist"); - -# cas empty -print $sock "cas foo 0 0 6 \r\nbarva2\r\n"; -is(scalar <$sock>, "CLIENT_ERROR bad command line format\r\n", "cas empty, throw error"); -# cant parse barval2\r\n -is(scalar <$sock>, "CLIENT_ERROR bad command line format\r\n", "error out on barval2 parsing"); - -# set foo1 -print $sock "set foo1 0 0 1\r\n1\r\n"; -is(scalar <$sock>, "STORED\r\n", "set foo1"); -# set foo2 -print $sock "set foo2 0 0 1\r\n2\r\n"; -is(scalar <$sock>, "STORED\r\n", "set foo2"); - -# gets foo1 check -print $sock "gets foo1\r\n"; -ok(scalar <$sock> =~ /VALUE foo1 0 1 (\d+)\r\n/, "gets foo1 regexp success"); -my $foo1_cas = $1; -is(scalar <$sock>, "1\r\n","gets foo1 data is 1"); -is(scalar <$sock>, "END\r\n","gets foo1 END"); - -# gets foo2 check -print $sock "gets foo2\r\n"; -ok(scalar <$sock> =~ /VALUE foo2 0 1 (\d+)\r\n/,"gets foo2 regexp success"); -my $foo2_cas = $1; -is(scalar <$sock>, "2\r\n","gets foo2 data is 2"); -is(scalar <$sock>, "END\r\n","gets foo2 END"); - -# validate foo1 != foo2 -ok($foo1_cas != $foo2_cas,"foo1 != foo2 single-gets success"); - -# multi-gets -print $sock "gets foo1 foo2\r\n"; -ok(scalar <$sock> =~ /VALUE foo1 0 1 (\d+)\r\n/, "validating first set of data is foo1"); -$foo1_cas = $1; -is(scalar <$sock>, "1\r\n", "validating foo1 set of data is 1"); -ok(scalar <$sock> =~ /VALUE foo2 0 1 (\d+)\r\n/, "validating second set of data is foo2"); -$foo2_cas = $1; -is(scalar <$sock>, "2\r\n", "validating foo2 set of data is 2"); -is(scalar <$sock>, "END\r\n","validating foo1,foo2 gets is over - END"); - -# validate foo1 != foo2 -ok($foo1_cas != $foo2_cas, "foo1 != foo2 multi-gets success"); - -### simulate race condition with cas - -# gets foo1 - success -@result = mem_gets($sock, "foo1"); -ok($result[0] != "", "sock - gets foo1 is not empty"); - -# gets foo2 - success -@result2 = mem_gets($sock2, "foo1"); -ok($result2[0] != "","sock2 - gets foo1 is not empty"); - -print $sock "cas foo1 0 0 6 $result[0]\r\nbarva2\r\n"; -print $sock2 "cas foo1 0 0 5 $result2[0]\r\napple\r\n"; - -my $res1 = <$sock>; -my $res2 = <$sock2>; - -ok( ( $res1 eq "STORED\r\n" && $res2 eq "EXISTS\r\n") || - ( $res1 eq "EXISTS\r\n" && $res2 eq "STORED\r\n"), - "cas on same item from two sockets"); -### bug 15: http://code.google.com/p/memcached/issues/detail?id=15 - -# set foo -print $sock "set bug15 0 0 1\r\n0\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored 0"); - -# Check out the first gets. -print $sock "gets bug15\r\n"; -ok(scalar <$sock> =~ /VALUE bug15 0 1 (\d+)\r\n/, "gets bug15 regexp success"); -my $bug15_cas = $1; -is(scalar <$sock>, "0\r\n", "gets bug15 data is 0"); -is(scalar <$sock>, "END\r\n","gets bug15 END"); - -# Increment -print $sock "incr bug15 1\r\n"; -is(scalar <$sock>, "1\r\n", "incr worked"); - -# Validate a changed CAS -print $sock "gets bug15\r\n"; -ok(scalar <$sock> =~ /VALUE bug15 0 1 (\d+)\r\n/, "gets bug15 regexp success"); -my $next_bug15_cas = $1; -is(scalar <$sock>, "1\r\n", "gets bug15 data is 0"); -is(scalar <$sock>, "END\r\n","gets bug15 END"); - -ok($bug15_cas != $next_bug15_cas, "CAS changed"); diff --git a/third_party/memcached/t/expirations.t b/third_party/memcached/t/expirations.t deleted file mode 100755 index c92125a90789fababfdd7e2fb4d1b8fbf66d8274..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/expirations.t +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Test::More tests => 15; -use FindBin qw($Bin); -use lib "$Bin/lib"; -use MemcachedTest; - -my $server = new_memcached(); -my $sock = $server->sock; -my $expire; - -sub wait_for_early_second { - my $have_hires = eval "use Time::HiRes (); 1"; - if ($have_hires) { - my $tsh = Time::HiRes::time(); - my $ts = int($tsh); - return if ($tsh - $ts) < 0.5; - } - - my $ts = int(time()); - while (1) { - my $t = int(time()); - return if $t != $ts; - select undef, undef, undef, 0.10; # 1/10th of a second sleeps until time changes. - } -} - -wait_for_early_second(); - -print $sock "set foo 0 1 6\r\nfooval\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored foo"); - -mem_get_is($sock, "foo", "fooval"); -sleep(1.5); -mem_get_is($sock, "foo", undef); - -$expire = time() - 1; -print $sock "set foo 0 $expire 6\r\nfooval\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored foo"); -mem_get_is($sock, "foo", undef, "already expired"); - -$expire = time() + 1; -print $sock "set foo 0 $expire 6\r\nfoov+1\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored foo"); -mem_get_is($sock, "foo", "foov+1"); -sleep(2.2); -mem_get_is($sock, "foo", undef, "now expired"); - -$expire = time() - 20; -print $sock "set boo 0 $expire 6\r\nbooval\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored boo"); -mem_get_is($sock, "boo", undef, "now expired"); - -print $sock "add add 0 2 6\r\naddval\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored add"); -mem_get_is($sock, "add", "addval"); -# second add fails -print $sock "add add 0 2 7\r\naddval2\r\n"; -is(scalar <$sock>, "NOT_STORED\r\n", "add failure"); -sleep(2.3); -print $sock "add add 0 2 7\r\naddval3\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored add again"); -mem_get_is($sock, "add", "addval3"); diff --git a/third_party/memcached/t/flags.t b/third_party/memcached/t/flags.t deleted file mode 100755 index e5231965991e60e1c1cbb5260bbe510a8801f678..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/flags.t +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Test::More tests => 6; -use FindBin qw($Bin); -use lib "$Bin/lib"; -use MemcachedTest; - -my $server = new_memcached(); -my $sock = $server->sock; - -# set foo (and should get it) -for my $flags (0, 123, 2**16-1) { - print $sock "set foo $flags 0 6\r\nfooval\r\n"; - is(scalar <$sock>, "STORED\r\n", "stored foo"); - mem_get_is({ sock => $sock, - flags => $flags }, "foo", "fooval", "got flags $flags back"); -} diff --git a/third_party/memcached/t/flush-all.t b/third_party/memcached/t/flush-all.t deleted file mode 100755 index e113fc960181a3f115c0e6b62a9935042c335350..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/flush-all.t +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Test::More tests => 14; -use FindBin qw($Bin); -use lib "$Bin/lib"; -use MemcachedTest; - -my $server = new_memcached(); -my $sock = $server->sock; -my $expire; - -print $sock "set foo 0 0 6\r\nfooval\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored foo"); - -mem_get_is($sock, "foo", "fooval"); -print $sock "flush_all\r\n"; -is(scalar <$sock>, "OK\r\n", "did flush_all"); -mem_get_is($sock, "foo", undef); - -# Test flush_all with zero delay. -print $sock "set foo 0 0 6\r\nfooval\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored foo"); - -mem_get_is($sock, "foo", "fooval"); -print $sock "flush_all 0\r\n"; -is(scalar <$sock>, "OK\r\n", "did flush_all"); -mem_get_is($sock, "foo", undef); - -# check that flush_all doesn't blow away items that immediately get set -print $sock "set foo 0 0 3\r\nnew\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored foo = 'new'"); -mem_get_is($sock, "foo", 'new'); - -# and the other form, specifying a flush_all time... -my $expire = time() + 2; -print $sock "flush_all $expire\r\n"; -is(scalar <$sock>, "OK\r\n", "did flush_all in future"); - -print $sock "set foo 0 0 4\r\n1234\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored foo = '1234'"); -mem_get_is($sock, "foo", '1234'); -sleep(2.2); -mem_get_is($sock, "foo", undef); diff --git a/third_party/memcached/t/getset.t b/third_party/memcached/t/getset.t deleted file mode 100755 index a36e19d05a1881ce3e3e773fffb308ac9e1f50c3..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/getset.t +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Test::More tests => 26; -use FindBin qw($Bin); -use lib "$Bin/lib"; -use MemcachedTest; - - -my $server = new_memcached(); -my $sock = $server->sock; - - -# set foo (and should get it) -print $sock "set foo 0 0 6\r\nfooval\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored foo"); -mem_get_is($sock, "foo", "fooval"); - -# add bar (and should get it) -print $sock "add bar 0 0 6\r\nbarval\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored barval"); -mem_get_is($sock, "bar", "barval"); - -# add foo (but shouldn't get new value) -print $sock "add foo 0 0 5\r\nfoov2\r\n"; -is(scalar <$sock>, "NOT_STORED\r\n", "not stored"); -mem_get_is($sock, "foo", "fooval"); - -# replace bar (should work) -print $sock "replace bar 0 0 6\r\nbarva2\r\n"; -is(scalar <$sock>, "STORED\r\n", "replaced barval 2"); - -# replace notexist (shouldn't work) -print $sock "replace notexist 0 0 6\r\nbarva2\r\n"; -is(scalar <$sock>, "NOT_STORED\r\n", "didn't replace notexist"); - -# delete foo. -print $sock "delete foo\r\n"; -is(scalar <$sock>, "DELETED\r\n", "deleted foo"); - -# delete foo again. not found this time. -print $sock "delete foo\r\n"; -is(scalar <$sock>, "NOT_FOUND\r\n", "deleted foo, but not found"); - -# add moo -# -print $sock "add moo 0 0 6\r\nmooval\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored barval"); -mem_get_is($sock, "moo", "mooval"); - -# check-and-set (cas) failure case, try to set value with incorrect cas unique val -print $sock "cas moo 0 0 6 0\r\nMOOVAL\r\n"; -is(scalar <$sock>, "EXISTS\r\n", "check and set with invalid id"); - -# test "gets", grab unique ID -print $sock "gets moo\r\n"; -# VALUE moo 0 6 3084947704 -# -my @retvals = split(/ /, scalar <$sock>); -my $data = scalar <$sock>; # grab data -my $dot = scalar <$sock>; # grab dot on line by itself -is($retvals[0], "VALUE", "get value using 'gets'"); - -my $unique_id = $retvals[4]; -# clean off \r\n -$unique_id =~ s/\r\n$//; -ok($unique_id =~ /^\d+$/, "unique ID '$unique_id' is an integer"); -# now test that we can store moo with the correct unique id -print $sock "cas moo 0 0 6 $unique_id\r\nMOOVAL\r\n"; -is(scalar <$sock>, "STORED\r\n"); -mem_get_is($sock, "moo", "MOOVAL"); - -# pipeling is okay -print $sock "set foo 0 0 6\r\nfooval\r\ndelete foo\r\nset foo 0 0 6\r\nfooval\r\ndelete foo\r\n"; -is(scalar <$sock>, "STORED\r\n", "pipeline set"); -is(scalar <$sock>, "DELETED\r\n", "pipeline delete"); -is(scalar <$sock>, "STORED\r\n", "pipeline set"); -is(scalar <$sock>, "DELETED\r\n", "pipeline delete"); - - -# Test sets up to a large size around 1MB. -# Everything up to 1MB - 1k should succeed, everything 1MB +1k should fail. - -my $len = 1024; -while ($len < 1024*1028) { - my $val = "B"x$len; - if ($len > (1024*1024)) { - # Ensure causing a memory overflow doesn't leave stale data. - print $sock "set foo_$len 0 0 3\r\nMOO\r\n"; - is(scalar <$sock>, "STORED\r\n"); - print $sock "set foo_$len 0 0 $len\r\n$val\r\n"; - is(scalar <$sock>, "SERVER_ERROR object too large for cache\r\n", "failed to store size $len"); - mem_get_is($sock, "foo_$len", "MOO"); - } else { - print $sock "set foo_$len 0 0 $len\r\n$val\r\n"; - is(scalar <$sock>, "STORED\r\n", "stored size $len"); - } - $len += 1024 * 512; -} - diff --git a/third_party/memcached/t/incrdecr.t b/third_party/memcached/t/incrdecr.t deleted file mode 100755 index e0ba65f47e1c300b6f4595d90d661e9012b9ddac..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/incrdecr.t +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Test::More tests => 23; -use FindBin qw($Bin); -use lib "$Bin/lib"; -use MemcachedTest; - -my $server = new_memcached(); -my $sock = $server->sock; - -# Bug 21 -print $sock "set bug21 0 0 19\r\n9223372036854775807\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored text"); -print $sock "incr bug21 1\r\n"; -is(scalar <$sock>, "9223372036854775808\r\n", "bug21 incr 1"); -print $sock "incr bug21 1\r\n"; -is(scalar <$sock>, "9223372036854775809\r\n", "bug21 incr 2"); -print $sock "decr bug21 1\r\n"; -is(scalar <$sock>, "9223372036854775808\r\n", "bug21 decr"); - -print $sock "set num 0 0 1\r\n1\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored num"); -mem_get_is($sock, "num", 1, "stored 1"); - -print $sock "incr num 1\r\n"; -is(scalar <$sock>, "2\r\n", "+ 1 = 2"); -mem_get_is($sock, "num", 2); - -print $sock "incr num 8\r\n"; -is(scalar <$sock>, "10\r\n", "+ 8 = 10"); -mem_get_is($sock, "num", 10); - -print $sock "decr num 1\r\n"; -is(scalar <$sock>, "9\r\n", "- 1 = 9"); - -print $sock "decr num 9\r\n"; -is(scalar <$sock>, "0\r\n", "- 9 = 0"); - -print $sock "decr num 5\r\n"; -is(scalar <$sock>, "0\r\n", "- 5 = 0"); - -printf $sock "set num 0 0 10\r\n4294967296\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored 2**32"); - -print $sock "incr num 1\r\n"; -is(scalar <$sock>, "4294967297\r\n", "4294967296 + 1 = 4294967297"); - -printf $sock "set num 0 0 %d\r\n18446744073709551615\r\n", length("18446744073709551615"); -is(scalar <$sock>, "STORED\r\n", "stored 2**64-1"); - -print $sock "incr num 1\r\n"; -is(scalar <$sock>, "0\r\n", "(2**64 - 1) + 1 = 0"); - -print $sock "decr bogus 5\r\n"; -is(scalar <$sock>, "NOT_FOUND\r\n", "can't decr bogus key"); - -print $sock "decr incr 5\r\n"; -is(scalar <$sock>, "NOT_FOUND\r\n", "can't incr bogus key"); - -print $sock "set bigincr 0 0 1\r\n0\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored bigincr"); -print $sock "incr bigincr 18446744073709551610\r\n"; -is(scalar <$sock>, "18446744073709551610\r\n"); - -print $sock "set text 0 0 2\r\nhi\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored hi"); -print $sock "incr text 1\r\n"; -is(scalar <$sock>, - "CLIENT_ERROR cannot increment or decrement non-numeric value\r\n", - "hi - 1 = 0"); diff --git a/third_party/memcached/t/lib/MemcachedTest.pm b/third_party/memcached/t/lib/MemcachedTest.pm deleted file mode 100644 index 18410b1fa3b63620a82d0fff3bb2f1c62b9b3238..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/lib/MemcachedTest.pm +++ /dev/null @@ -1,260 +0,0 @@ -package MemcachedTest; -use strict; -use IO::Socket::INET; -use IO::Socket::UNIX; -use Exporter 'import'; -use Carp qw(croak); -use vars qw(@EXPORT); - -# Instead of doing the substitution with Autoconf, we assume that -# cwd == builddir. -use Cwd; -my $builddir = getcwd; - - -@EXPORT = qw(new_memcached sleep mem_get_is mem_gets mem_gets_is mem_stats free_port); - -sub sleep { - my $n = shift; - select undef, undef, undef, $n; -} - -sub mem_stats { - my ($sock, $type) = @_; - $type = $type ? " $type" : ""; - print $sock "stats$type\r\n"; - my $stats = {}; - while (<$sock>) { - last if /^(\.|END)/; - /^(STAT|ITEM) (\S+)\s+([^\r\n]+)/; - #print " slabs: $_"; - $stats->{$2} = $3; - } - return $stats; -} - -sub mem_get_is { - # works on single-line values only. no newlines in value. - my ($sock_opts, $key, $val, $msg) = @_; - my $opts = ref $sock_opts eq "HASH" ? $sock_opts : {}; - my $sock = ref $sock_opts eq "HASH" ? $opts->{sock} : $sock_opts; - - my $expect_flags = $opts->{flags} || 0; - my $dval = defined $val ? "'$val'" : "<undef>"; - $msg ||= "$key == $dval"; - - print $sock "get $key\r\n"; - if (! defined $val) { - my $line = scalar <$sock>; - if ($line =~ /^VALUE/) { - $line .= scalar(<$sock>) . scalar(<$sock>); - } - Test::More::is($line, "END\r\n", $msg); - } else { - my $len = length($val); - my $body = scalar(<$sock>); - my $expected = "VALUE $key $expect_flags $len\r\n$val\r\nEND\r\n"; - if (!$body || $body =~ /^END/) { - Test::More::is($body, $expected, $msg); - return; - } - $body .= scalar(<$sock>) . scalar(<$sock>); - Test::More::is($body, $expected, $msg); - } -} - -sub mem_gets { - # works on single-line values only. no newlines in value. - my ($sock_opts, $key) = @_; - my $opts = ref $sock_opts eq "HASH" ? $sock_opts : {}; - my $sock = ref $sock_opts eq "HASH" ? $opts->{sock} : $sock_opts; - my $val; - my $expect_flags = $opts->{flags} || 0; - - print $sock "gets $key\r\n"; - my $response = <$sock>; - if ($response =~ /^END/) { - return "NOT_FOUND"; - } - else - { - $response =~ /VALUE (.*) (\d+) (\d+) (\d+)/; - my $flags = $2; - my $len = $3; - my $identifier = $4; - read $sock, $val , $len; - # get the END - $_ = <$sock>; - $_ = <$sock>; - - return ($identifier,$val); - } - -} -sub mem_gets_is { - # works on single-line values only. no newlines in value. - my ($sock_opts, $identifier, $key, $val, $msg) = @_; - my $opts = ref $sock_opts eq "HASH" ? $sock_opts : {}; - my $sock = ref $sock_opts eq "HASH" ? $opts->{sock} : $sock_opts; - - my $expect_flags = $opts->{flags} || 0; - my $dval = defined $val ? "'$val'" : "<undef>"; - $msg ||= "$key == $dval"; - - print $sock "gets $key\r\n"; - if (! defined $val) { - my $line = scalar <$sock>; - if ($line =~ /^VALUE/) { - $line .= scalar(<$sock>) . scalar(<$sock>); - } - Test::More::is($line, "END\r\n", $msg); - } else { - my $len = length($val); - my $body = scalar(<$sock>); - my $expected = "VALUE $key $expect_flags $len $identifier\r\n$val\r\nEND\r\n"; - if (!$body || $body =~ /^END/) { - Test::More::is($body, $expected, $msg); - return; - } - $body .= scalar(<$sock>) . scalar(<$sock>); - Test::More::is($body, $expected, $msg); - } -} - -sub free_port { - my $type = shift || "tcp"; - my $sock; - my $port; - while (!$sock) { - $port = int(rand(20000)) + 30000; - $sock = IO::Socket::INET->new(LocalAddr => '127.0.0.1', - LocalPort => $port, - Proto => $type, - ReuseAddr => 1); - } - return $port; -} - -sub supports_udp { - my $output = `$builddir/memcached-debug -h`; - return 0 if $output =~ /^memcached 1\.1\./; - return 1; -} - -sub new_memcached { - my ($args, $passed_port) = @_; - my $port = $passed_port || free_port(); - my $host = '127.0.0.1'; - - if ($ENV{T_MEMD_USE_DAEMON}) { - my ($host, $port) = ($ENV{T_MEMD_USE_DAEMON} =~ m/^([^:]+):(\d+)$/); - my $conn = IO::Socket::INET->new(PeerAddr => "$host:$port"); - if ($conn) { - return Memcached::Handle->new(conn => $conn, - host => $host, - port => $port); - } - croak("Failed to connect to specified memcached server.") unless $conn; - } - - my $udpport = free_port("udp"); - $args .= " -p $port"; - if (supports_udp()) { - $args .= " -U $udpport"; - } - if ($< == 0) { - $args .= " -u root"; - } - my $childpid = fork(); - - my $exe = "$builddir/memcached-debug"; - croak("memcached binary doesn't exist. Haven't run 'make' ?\n") unless -e $exe; - croak("memcached binary not executable\n") unless -x _; - - unless ($childpid) { - exec "$builddir/timedrun 600 $exe $args"; - exit; # never gets here. - } - - # unix domain sockets - if ($args =~ /-s (\S+)/) { - sleep 1; - my $filename = $1; - my $conn = IO::Socket::UNIX->new(Peer => $filename) || - croak("Failed to connect to unix domain socket: $! '$filename'"); - - return Memcached::Handle->new(pid => $childpid, - conn => $conn, - domainsocket => $filename, - host => $host, - port => $port); - } - - # try to connect / find open port, only if we're not using unix domain - # sockets - - for (1..20) { - my $conn = IO::Socket::INET->new(PeerAddr => "127.0.0.1:$port"); - if ($conn) { - return Memcached::Handle->new(pid => $childpid, - conn => $conn, - udpport => $udpport, - host => $host, - port => $port); - } - select undef, undef, undef, 0.10; - } - croak("Failed to startup/connect to memcached server."); -} - -############################################################################ -package Memcached::Handle; -sub new { - my ($class, %params) = @_; - return bless \%params, $class; -} - -sub DESTROY { - my $self = shift; - kill 2, $self->{pid} if $self->{pid}; -} - -sub stop { - my $self = shift; - kill 15, $self->{pid}; -} - -sub host { $_[0]{host} } -sub port { $_[0]{port} } -sub udpport { $_[0]{udpport} } - -sub sock { - my $self = shift; - - if ($self->{conn} && ($self->{domainsocket} || getpeername($self->{conn}))) { - return $self->{conn}; - } - return $self->new_sock; -} - -sub new_sock { - my $self = shift; - if ($self->{domainsocket}) { - return IO::Socket::UNIX->new(Peer => $self->{domainsocket}); - } else { - return IO::Socket::INET->new(PeerAddr => "$self->{host}:$self->{port}"); - } -} - -sub new_udp_sock { - my $self = shift; - return IO::Socket::INET->new(PeerAddr => '127.0.0.1', - PeerPort => $self->{udpport}, - Proto => 'udp', - LocalAddr => '127.0.0.1', - LocalPort => MemcachedTest::free_port('udp'), - ); - -} - -1; diff --git a/third_party/memcached/t/multiversioning.t b/third_party/memcached/t/multiversioning.t deleted file mode 100755 index df9eab48fd6fb6d4663d07cc85e3370f9667cdb1..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/multiversioning.t +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Test::More tests => 13; -use FindBin qw($Bin); -use lib "$Bin/lib"; -use MemcachedTest; - -my $server = new_memcached(); -my $sock = $server->sock; -my $sock2 = $server->new_sock; - -ok($sock != $sock2, "have two different connections open"); - -# set large value -my $size = 256 * 1024; # 256 kB -my $bigval = "0123456789abcdef" x ($size / 16); -$bigval =~ s/^0/\[/; $bigval =~ s/f$/\]/; -my $bigval2 = uc($bigval); - -print $sock "set big 0 0 $size\r\n$bigval\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored foo"); -mem_get_is($sock, "big", $bigval, "big value got correctly"); - -print $sock "get big\r\n"; -my $buf; -is(read($sock, $buf, $size / 2), $size / 2, "read half the answer back"); -like($buf, qr/VALUE big/, "buf has big value header in it"); -like($buf, qr/abcdef/, "buf has some data in it"); -unlike($buf, qr/abcde\]/, "buf doesn't yet close"); - -# sock2 interrupts (maybe sock1 is slow) and deletes stuff: -print $sock2 "delete big\r\n"; -is(scalar <$sock2>, "DELETED\r\n", "deleted big from sock2 while sock1's still reading it"); -mem_get_is($sock2, "big", undef, "nothing from sock2 now. gone from namespace."); -print $sock2 "set big 0 0 $size\r\n$bigval2\r\n"; -is(scalar <$sock2>, "STORED\r\n", "stored big w/ val2"); -mem_get_is($sock2, "big", $bigval2, "big value2 got correctly"); - -# sock1 resumes reading... -$buf .= <$sock>; -$buf .= <$sock>; -like($buf, qr/abcde\]/, "buf now closes"); - -# and if sock1 reads again, it's the uppercase version: -mem_get_is($sock, "big", $bigval2, "big value2 got correctly from sock1"); diff --git a/third_party/memcached/t/noreply.t b/third_party/memcached/t/noreply.t deleted file mode 100644 index a57a4afcd742b1cf1f1e784cfad1927db6111ad7..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/noreply.t +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Test::More tests => 9; -use FindBin qw($Bin); -use lib "$Bin/lib"; -use MemcachedTest; - - -my $server = new_memcached(); -my $sock = $server->sock; - -# Test that commands can take 'noreply' parameter. -print $sock "flush_all noreply\r\n"; -print $sock "flush_all 0 noreply\r\n"; - -print $sock "add noreply:foo 0 0 1 noreply\r\n1\r\n"; -mem_get_is($sock, "noreply:foo", "1"); - -print $sock "set noreply:foo 0 0 1 noreply\r\n2\r\n"; -mem_get_is($sock, "noreply:foo", "2"); - -print $sock "replace noreply:foo 0 0 1 noreply\r\n3\r\n"; -mem_get_is($sock, "noreply:foo", "3"); - -print $sock "append noreply:foo 0 0 1 noreply\r\n4\r\n"; -mem_get_is($sock, "noreply:foo", "34"); - -print $sock "prepend noreply:foo 0 0 1 noreply\r\n5\r\n"; -my @result = mem_gets($sock, "noreply:foo"); -ok($result[1] eq "534"); - -print $sock "cas noreply:foo 0 0 1 $result[0] noreply\r\n6\r\n"; -mem_get_is($sock, "noreply:foo", "6"); - -print $sock "incr noreply:foo 3 noreply\r\n"; -mem_get_is($sock, "noreply:foo", "9"); - -print $sock "decr noreply:foo 2 noreply\r\n"; -mem_get_is($sock, "noreply:foo", "7"); - -print $sock "delete noreply:foo noreply\r\n"; -mem_get_is($sock, "noreply:foo"); - diff --git a/third_party/memcached/t/stress-memcached.pl b/third_party/memcached/t/stress-memcached.pl deleted file mode 100755 index aeacbc2c38503f47fda60c0742973467c4caf1df..0000000000000000000000000000000000000000 --- a/third_party/memcached/t/stress-memcached.pl +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/perl -# - -use strict; -use lib '../../api/perl/lib'; -use Cache::Memcached; -use Time::HiRes qw(time); - -unless (@ARGV == 2) { - die "Usage: stress-memcached.pl ip:port threads\n"; -} - -my $host = shift; -my $threads = shift; - -my $memc = new Cache::Memcached; -$memc->set_servers([$host]); - -unless ($memc->set("foo", "bar") && - $memc->get("foo") eq "bar") { - die "memcached not running at $host ?\n"; -} -$memc->disconnect_all(); - - -my $running = 0; -while (1) { - if ($running < $threads) { - my $cpid = fork(); - if ($cpid) { - $running++; - #print "Launched $cpid. Running $running threads.\n"; - } else { - stress(); - exit 0; - } - } else { - wait(); - $running--; - } -} - -sub stress { - undef $memc; - $memc = new Cache::Memcached; - $memc->set_servers([$host]); - - my ($t1, $t2); - my $start = sub { $t1 = time(); }; - my $stop = sub { - my $op = shift; - $t2 = time(); - my $td = sprintf("%0.3f", $t2 - $t1); - if ($td > 0.25) { print "Took $td seconds for: $op\n"; } - }; - - my $max = rand(50); - my $sets = 0; - - for (my $i = 0; $i < $max; $i++) { - my $key = key($i); - my $set = $memc->set($key, $key); - $sets++ if $set; - } - - for (1..int(rand(500))) { - my $rand = int(rand($max)); - my $key = key($rand); - my $meth = int(rand(3)); - my $exp = int(rand(3)); - undef $exp unless $exp; - $start->(); - if ($meth == 0) { - $memc->add($key, $key, $exp); - $stop->("add"); - } elsif ($meth == 1) { - $memc->delete($key); - $stop->("delete"); - } else { - $memc->set($key, $key, $exp); - $stop->("set"); - } - $rand = int(rand($max)); - $key = key($rand); - $start->(); - my $v = $memc->get($key); - $stop->("get"); - if ($v && $v ne $key) { die "Bogus: $v for key $rand\n"; } - } - - $start->(); - my $multi = $memc->get_multi(map { key(int(rand($max))) } (1..$max)); - $stop->("get_multi"); -} - -sub key { - my $n = shift; - $_ = sprintf("%04d", $n); - if ($n % 2) { $_ .= "a"x20; } - $_; -}