From: Continuous Integration Date: Tue, 3 Apr 2012 06:50:13 +0000 (-0700) Subject: Merging bzr://gaz.tangent.org/libmemcached/build/ to Build branch X-Git-Tag: 1.0.7~13^2^2 X-Git-Url: https://git.m6w6.name/?a=commitdiff_plain;h=65e75d2db2d217b37c94c36d48607cb8425c8f86;hp=000810c79a803a1b8696697cbac13bf9f921c959;p=awesomized%2Flibmemcached Merging bzr://gaz.tangent.org/libmemcached/build/ to Build branch --- diff --git a/.bzrignore b/.bzrignore index c9674c1d..10a43471 100644 --- a/.bzrignore +++ b/.bzrignore @@ -147,3 +147,4 @@ libtest/abort memcached/.git memcached/.gitignore memcached/memcached +memcached/memcached.spec diff --git a/docs/man/hashkit_clone.3 b/docs/man/hashkit_clone.3 index 993ffd72..6ae1246b 100644 --- a/docs/man/hashkit_clone.3 +++ b/docs/man/hashkit_clone.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_CLONE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_CLONE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_clone \- libhashkit Documentation . diff --git a/docs/man/hashkit_crc32.3 b/docs/man/hashkit_crc32.3 index 12298a86..df179066 100644 --- a/docs/man/hashkit_crc32.3 +++ b/docs/man/hashkit_crc32.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_CRC32" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_CRC32" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_crc32 \- libhashkit Documentation . diff --git a/docs/man/hashkit_create.3 b/docs/man/hashkit_create.3 index 779a4653..b40a002b 100644 --- a/docs/man/hashkit_create.3 +++ b/docs/man/hashkit_create.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_CREATE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_CREATE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_create \- libhashkit Documentation . diff --git a/docs/man/hashkit_fnv1_32.3 b/docs/man/hashkit_fnv1_32.3 index dc529696..9fcf67e8 100644 --- a/docs/man/hashkit_fnv1_32.3 +++ b/docs/man/hashkit_fnv1_32.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_FNV1_32" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_FNV1_32" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_fnv1_32 \- libhashkit Documentation . diff --git a/docs/man/hashkit_fnv1_64.3 b/docs/man/hashkit_fnv1_64.3 index abf8e333..90223a99 100644 --- a/docs/man/hashkit_fnv1_64.3 +++ b/docs/man/hashkit_fnv1_64.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_FNV1_64" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_FNV1_64" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_fnv1_64 \- libhashkit Documentation . diff --git a/docs/man/hashkit_fnv1a_32.3 b/docs/man/hashkit_fnv1a_32.3 index 78213cdf..0518624f 100644 --- a/docs/man/hashkit_fnv1a_32.3 +++ b/docs/man/hashkit_fnv1a_32.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_FNV1A_32" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_FNV1A_32" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_fnv1a_32 \- libhashkit Documentation . diff --git a/docs/man/hashkit_fnv1a_64.3 b/docs/man/hashkit_fnv1a_64.3 index 2265a75e..6df9dc99 100644 --- a/docs/man/hashkit_fnv1a_64.3 +++ b/docs/man/hashkit_fnv1a_64.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_FNV1A_64" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_FNV1A_64" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_fnv1a_64 \- libhashkit Documentation . diff --git a/docs/man/hashkit_free.3 b/docs/man/hashkit_free.3 index 21736938..f1be3037 100644 --- a/docs/man/hashkit_free.3 +++ b/docs/man/hashkit_free.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_FREE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_FREE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_free \- libhashkit Documentation . diff --git a/docs/man/hashkit_functions.3 b/docs/man/hashkit_functions.3 index 102850d1..a471a60b 100644 --- a/docs/man/hashkit_functions.3 +++ b/docs/man/hashkit_functions.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_FUNCTIONS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_FUNCTIONS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_functions \- libhashkit Documentation . diff --git a/docs/man/hashkit_hsieh.3 b/docs/man/hashkit_hsieh.3 index a5bb5e6d..6230d7c6 100644 --- a/docs/man/hashkit_hsieh.3 +++ b/docs/man/hashkit_hsieh.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_HSIEH" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_HSIEH" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_hsieh \- libhashkit Documentation . diff --git a/docs/man/hashkit_is_allocated.3 b/docs/man/hashkit_is_allocated.3 index cf89383b..f909fff9 100644 --- a/docs/man/hashkit_is_allocated.3 +++ b/docs/man/hashkit_is_allocated.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_IS_ALLOCATED" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_IS_ALLOCATED" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_is_allocated \- libhashkit Documentation . diff --git a/docs/man/hashkit_jenkins.3 b/docs/man/hashkit_jenkins.3 index 47db7796..c77ec0db 100644 --- a/docs/man/hashkit_jenkins.3 +++ b/docs/man/hashkit_jenkins.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_JENKINS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_JENKINS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_jenkins \- libhashkit Documentation . diff --git a/docs/man/hashkit_md5.3 b/docs/man/hashkit_md5.3 index b7dd56ab..0a59d12b 100644 --- a/docs/man/hashkit_md5.3 +++ b/docs/man/hashkit_md5.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_MD5" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_MD5" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_md5 \- libhashkit Documentation . diff --git a/docs/man/hashkit_murmur.3 b/docs/man/hashkit_murmur.3 index 0a4bd77e..71164a19 100644 --- a/docs/man/hashkit_murmur.3 +++ b/docs/man/hashkit_murmur.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_MURMUR" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_MURMUR" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_murmur \- libhashkit Documentation . diff --git a/docs/man/hashkit_value.3 b/docs/man/hashkit_value.3 index 3f582bf2..0e835698 100644 --- a/docs/man/hashkit_value.3 +++ b/docs/man/hashkit_value.3 @@ -1,4 +1,4 @@ -.TH "HASHKIT_VALUE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "HASHKIT_VALUE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME hashkit_value \- libhashkit Documentation . diff --git a/docs/man/libhashkit.3 b/docs/man/libhashkit.3 index cd079b5d..6d010e04 100644 --- a/docs/man/libhashkit.3 +++ b/docs/man/libhashkit.3 @@ -1,4 +1,4 @@ -.TH "LIBHASHKIT" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "LIBHASHKIT" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME libhashkit \- libhashkit Documentation . diff --git a/docs/man/libmemcached.3 b/docs/man/libmemcached.3 index c7a11585..622ad69e 100644 --- a/docs/man/libmemcached.3 +++ b/docs/man/libmemcached.3 @@ -1,4 +1,4 @@ -.TH "LIBMEMCACHED" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "LIBMEMCACHED" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME libmemcached \- Introducing the C Client Library for memcached . diff --git a/docs/man/libmemcached_check_configuration.3 b/docs/man/libmemcached_check_configuration.3 index 892b5c49..64adab3f 100644 --- a/docs/man/libmemcached_check_configuration.3 +++ b/docs/man/libmemcached_check_configuration.3 @@ -1,4 +1,4 @@ -.TH "LIBMEMCACHED_CHECK_CONFIGURATION" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "LIBMEMCACHED_CHECK_CONFIGURATION" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME libmemcached_check_configuration \- libmemcached Documentation . diff --git a/docs/man/libmemcached_configuration.3 b/docs/man/libmemcached_configuration.3 index 3b75a24e..668068bd 100644 --- a/docs/man/libmemcached_configuration.3 +++ b/docs/man/libmemcached_configuration.3 @@ -1,4 +1,4 @@ -.TH "LIBMEMCACHED_CONFIGURATION" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "LIBMEMCACHED_CONFIGURATION" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME libmemcached_configuration \- libmemcached Documentation . diff --git a/docs/man/libmemcached_examples.3 b/docs/man/libmemcached_examples.3 index 762a3d03..afa87a38 100644 --- a/docs/man/libmemcached_examples.3 +++ b/docs/man/libmemcached_examples.3 @@ -1,4 +1,4 @@ -.TH "LIBMEMCACHED_EXAMPLES" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "LIBMEMCACHED_EXAMPLES" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME libmemcached_examples \- libmemcached Documentation . diff --git a/docs/man/libmemcachedutil.3 b/docs/man/libmemcachedutil.3 index d9bdd620..e78679f6 100644 --- a/docs/man/libmemcachedutil.3 +++ b/docs/man/libmemcachedutil.3 @@ -1,4 +1,4 @@ -.TH "LIBMEMCACHEDUTIL" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "LIBMEMCACHEDUTIL" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME libmemcachedutil \- libmemcached Documentation . diff --git a/docs/man/memaslap.1 b/docs/man/memaslap.1 index 54b9b6e7..39d0d510 100644 --- a/docs/man/memaslap.1 +++ b/docs/man/memaslap.1 @@ -1,4 +1,4 @@ -.TH "MEMASLAP" "1" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMASLAP" "1" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memaslap \- libmemcached Documentation . diff --git a/docs/man/memcached.3 b/docs/man/memcached.3 index 04e95d44..a5ff2cd8 100644 --- a/docs/man/memcached.3 +++ b/docs/man/memcached.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached \- libmemcached Documentation . diff --git a/docs/man/memcached_add.3 b/docs/man/memcached_add.3 index 2bdf0b18..9d655c9f 100644 --- a/docs/man/memcached_add.3 +++ b/docs/man/memcached_add.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_ADD" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_ADD" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_add \- Storing and Replacing Data . diff --git a/docs/man/memcached_add_by_key.3 b/docs/man/memcached_add_by_key.3 index ece05ddc..b0e4bd4e 100644 --- a/docs/man/memcached_add_by_key.3 +++ b/docs/man/memcached_add_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_ADD_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_ADD_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_add_by_key \- Storing and Replacing Data . diff --git a/docs/man/memcached_analyze.3 b/docs/man/memcached_analyze.3 index d2a4a53e..6b6a2494 100644 --- a/docs/man/memcached_analyze.3 +++ b/docs/man/memcached_analyze.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_ANALYZE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_ANALYZE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_analyze \- libmemcached Documentation . diff --git a/docs/man/memcached_append.3 b/docs/man/memcached_append.3 index 926ce4c6..ae46d20c 100644 --- a/docs/man/memcached_append.3 +++ b/docs/man/memcached_append.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_APPEND" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_APPEND" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_append \- Appending to or Prepending to data on the server . diff --git a/docs/man/memcached_append_by_key.3 b/docs/man/memcached_append_by_key.3 index a4f916f2..62c82a38 100644 --- a/docs/man/memcached_append_by_key.3 +++ b/docs/man/memcached_append_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_APPEND_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_APPEND_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_append_by_key \- Appending to or Prepending to data on the server . diff --git a/docs/man/memcached_auto.3 b/docs/man/memcached_auto.3 index 143f6af6..5ccda92d 100644 --- a/docs/man/memcached_auto.3 +++ b/docs/man/memcached_auto.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_AUTO" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_AUTO" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_auto \- Incrementing and Decrementing Values . diff --git a/docs/man/memcached_behavior.3 b/docs/man/memcached_behavior.3 index abe2f4d6..037a384a 100644 --- a/docs/man/memcached_behavior.3 +++ b/docs/man/memcached_behavior.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_BEHAVIOR" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_BEHAVIOR" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_behavior \- libmemcached Documentation . diff --git a/docs/man/memcached_behavior_get.3 b/docs/man/memcached_behavior_get.3 index d070d344..c5ba20df 100644 --- a/docs/man/memcached_behavior_get.3 +++ b/docs/man/memcached_behavior_get.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_BEHAVIOR_GET" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_BEHAVIOR_GET" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_behavior_get \- libmemcached Documentation . diff --git a/docs/man/memcached_behavior_set.3 b/docs/man/memcached_behavior_set.3 index e1197549..5c10edd4 100644 --- a/docs/man/memcached_behavior_set.3 +++ b/docs/man/memcached_behavior_set.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_BEHAVIOR_SET" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_BEHAVIOR_SET" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_behavior_set \- libmemcached Documentation . diff --git a/docs/man/memcached_callback.3 b/docs/man/memcached_callback.3 index 850336a2..dae80ba0 100644 --- a/docs/man/memcached_callback.3 +++ b/docs/man/memcached_callback.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_CALLBACK" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_CALLBACK" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_callback \- libmemcached Documentation . diff --git a/docs/man/memcached_callback_get.3 b/docs/man/memcached_callback_get.3 index 37f5bb88..7fad5001 100644 --- a/docs/man/memcached_callback_get.3 +++ b/docs/man/memcached_callback_get.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_CALLBACK_GET" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_CALLBACK_GET" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_callback_get \- libmemcached Documentation . diff --git a/docs/man/memcached_callback_set.3 b/docs/man/memcached_callback_set.3 index 2a5d1329..0b7b1a29 100644 --- a/docs/man/memcached_callback_set.3 +++ b/docs/man/memcached_callback_set.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_CALLBACK_SET" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_CALLBACK_SET" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_callback_set \- libmemcached Documentation . diff --git a/docs/man/memcached_cas.3 b/docs/man/memcached_cas.3 index 9c747e79..4244fffc 100644 --- a/docs/man/memcached_cas.3 +++ b/docs/man/memcached_cas.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_CAS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_CAS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_cas \- Working with data on the server in an atomic fashion . diff --git a/docs/man/memcached_cas_by_key.3 b/docs/man/memcached_cas_by_key.3 index f1613d64..20e97a11 100644 --- a/docs/man/memcached_cas_by_key.3 +++ b/docs/man/memcached_cas_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_CAS_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_CAS_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_cas_by_key \- Storing and Replacing Data . diff --git a/docs/man/memcached_clone.3 b/docs/man/memcached_clone.3 index 9e57ba16..8bc4bd09 100644 --- a/docs/man/memcached_clone.3 +++ b/docs/man/memcached_clone.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_CLONE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_CLONE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_clone \- libmemcached Documentation . diff --git a/docs/man/memcached_create.3 b/docs/man/memcached_create.3 index e7832555..05d310d8 100644 --- a/docs/man/memcached_create.3 +++ b/docs/man/memcached_create.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_CREATE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_CREATE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_create \- libmemcached Documentation . diff --git a/docs/man/memcached_decrement.3 b/docs/man/memcached_decrement.3 index f49d1e6d..52d82b3d 100644 --- a/docs/man/memcached_decrement.3 +++ b/docs/man/memcached_decrement.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_DECREMENT" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_DECREMENT" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_decrement \- Incrementing and Decrementing Values . diff --git a/docs/man/memcached_decrement_with_initial.3 b/docs/man/memcached_decrement_with_initial.3 index 880614eb..1445202f 100644 --- a/docs/man/memcached_decrement_with_initial.3 +++ b/docs/man/memcached_decrement_with_initial.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_DECREMENT_WITH_INITIAL" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_DECREMENT_WITH_INITIAL" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_decrement_with_initial \- Incrementing and Decrementing Values . diff --git a/docs/man/memcached_delete.3 b/docs/man/memcached_delete.3 index 5033df82..e8c9484b 100644 --- a/docs/man/memcached_delete.3 +++ b/docs/man/memcached_delete.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_DELETE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_DELETE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_delete \- libmemcached Documentation . diff --git a/docs/man/memcached_delete_by_key.3 b/docs/man/memcached_delete_by_key.3 index ccde69ea..bc2dd087 100644 --- a/docs/man/memcached_delete_by_key.3 +++ b/docs/man/memcached_delete_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_DELETE_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_DELETE_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_delete_by_key \- libmemcached Documentation . diff --git a/docs/man/memcached_destroy_sasl_auth_data.3 b/docs/man/memcached_destroy_sasl_auth_data.3 index b4b29224..dda077f5 100644 --- a/docs/man/memcached_destroy_sasl_auth_data.3 +++ b/docs/man/memcached_destroy_sasl_auth_data.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_DESTROY_SASL_AUTH_DATA" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_DESTROY_SASL_AUTH_DATA" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_destroy_sasl_auth_data \- libmemcached Documentation . diff --git a/docs/man/memcached_dump.3 b/docs/man/memcached_dump.3 index adbf468d..ff313f59 100644 --- a/docs/man/memcached_dump.3 +++ b/docs/man/memcached_dump.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_DUMP" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_DUMP" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_dump \- libmemcached Documentation . diff --git a/docs/man/memcached_exist.3 b/docs/man/memcached_exist.3 index eb40d1d9..645c35ce 100644 --- a/docs/man/memcached_exist.3 +++ b/docs/man/memcached_exist.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_EXIST" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_EXIST" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_exist \- libmemcached Documentation . diff --git a/docs/man/memcached_exist_by_key.3 b/docs/man/memcached_exist_by_key.3 index 9b7f690b..9040370c 100644 --- a/docs/man/memcached_exist_by_key.3 +++ b/docs/man/memcached_exist_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_EXIST_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_EXIST_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_exist_by_key \- libmemcached Documentation . diff --git a/docs/man/memcached_fetch.3 b/docs/man/memcached_fetch.3 index 66523681..3e4edaac 100644 --- a/docs/man/memcached_fetch.3 +++ b/docs/man/memcached_fetch.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_FETCH" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_FETCH" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_fetch \- Retrieving data from the server . diff --git a/docs/man/memcached_fetch_execute.3 b/docs/man/memcached_fetch_execute.3 index f0a86dfe..1dc3e428 100644 --- a/docs/man/memcached_fetch_execute.3 +++ b/docs/man/memcached_fetch_execute.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_FETCH_EXECUTE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_FETCH_EXECUTE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_fetch_execute \- Retrieving data from the server . diff --git a/docs/man/memcached_fetch_result.3 b/docs/man/memcached_fetch_result.3 index a9fff737..d367f7d6 100644 --- a/docs/man/memcached_fetch_result.3 +++ b/docs/man/memcached_fetch_result.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_FETCH_RESULT" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_FETCH_RESULT" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_fetch_result \- Retrieving data from the server . diff --git a/docs/man/memcached_flush.3 b/docs/man/memcached_flush.3 index 19838dbf..bf29a9d0 100644 --- a/docs/man/memcached_flush.3 +++ b/docs/man/memcached_flush.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_FLUSH" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_FLUSH" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_flush \- libmemcached Documentation . diff --git a/docs/man/memcached_flush_buffers.3 b/docs/man/memcached_flush_buffers.3 index e77a2ad7..94d443b8 100644 --- a/docs/man/memcached_flush_buffers.3 +++ b/docs/man/memcached_flush_buffers.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_FLUSH_BUFFERS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_FLUSH_BUFFERS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_flush_buffers \- libmemcached Documentation . diff --git a/docs/man/memcached_free.3 b/docs/man/memcached_free.3 index 230d690c..95a877bb 100644 --- a/docs/man/memcached_free.3 +++ b/docs/man/memcached_free.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_FREE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_FREE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_free \- libmemcached Documentation . diff --git a/docs/man/memcached_generate_hash.3 b/docs/man/memcached_generate_hash.3 index 50d3ac0e..607b9dd8 100644 --- a/docs/man/memcached_generate_hash.3 +++ b/docs/man/memcached_generate_hash.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_GENERATE_HASH" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_GENERATE_HASH" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_generate_hash \- Generating hash values directly . diff --git a/docs/man/memcached_generate_hash_value.3 b/docs/man/memcached_generate_hash_value.3 index 169dce81..8fc74042 100644 --- a/docs/man/memcached_generate_hash_value.3 +++ b/docs/man/memcached_generate_hash_value.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_GENERATE_HASH_VALUE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_GENERATE_HASH_VALUE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_generate_hash_value \- Generating hash values directly . diff --git a/docs/man/memcached_get.3 b/docs/man/memcached_get.3 index a3bbff26..015ca443 100644 --- a/docs/man/memcached_get.3 +++ b/docs/man/memcached_get.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_GET" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_GET" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_get \- Retrieving data from the server . diff --git a/docs/man/memcached_get_by_key.3 b/docs/man/memcached_get_by_key.3 index c754783a..e7accfd7 100644 --- a/docs/man/memcached_get_by_key.3 +++ b/docs/man/memcached_get_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_GET_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_GET_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_get_by_key \- Retrieving data from the server . diff --git a/docs/man/memcached_get_memory_allocators.3 b/docs/man/memcached_get_memory_allocators.3 index 19592e8b..72858351 100644 --- a/docs/man/memcached_get_memory_allocators.3 +++ b/docs/man/memcached_get_memory_allocators.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_GET_MEMORY_ALLOCATORS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_GET_MEMORY_ALLOCATORS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_get_memory_allocators \- libmemcached Documentation . diff --git a/docs/man/memcached_get_sasl_callbacks.3 b/docs/man/memcached_get_sasl_callbacks.3 index 4ccfdb6f..1702cfd4 100644 --- a/docs/man/memcached_get_sasl_callbacks.3 +++ b/docs/man/memcached_get_sasl_callbacks.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_GET_SASL_CALLBACKS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_GET_SASL_CALLBACKS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_get_sasl_callbacks \- libmemcached Documentation . diff --git a/docs/man/memcached_get_user_data.3 b/docs/man/memcached_get_user_data.3 index 3b30f32e..04bc14a7 100644 --- a/docs/man/memcached_get_user_data.3 +++ b/docs/man/memcached_get_user_data.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_GET_USER_DATA" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_GET_USER_DATA" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_get_user_data \- libmemcached Documentation . diff --git a/docs/man/memcached_increment.3 b/docs/man/memcached_increment.3 index bf0cd29e..2dda7eae 100644 --- a/docs/man/memcached_increment.3 +++ b/docs/man/memcached_increment.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_INCREMENT" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_INCREMENT" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_increment \- Incrementing and Decrementing Values . diff --git a/docs/man/memcached_increment_with_initial.3 b/docs/man/memcached_increment_with_initial.3 index 78e1716d..565ef7a3 100644 --- a/docs/man/memcached_increment_with_initial.3 +++ b/docs/man/memcached_increment_with_initial.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_INCREMENT_WITH_INITIAL" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_INCREMENT_WITH_INITIAL" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_increment_with_initial \- Incrementing and Decrementing Values . diff --git a/docs/man/memcached_last_error_message.3 b/docs/man/memcached_last_error_message.3 index b99ce95b..5715d661 100644 --- a/docs/man/memcached_last_error_message.3 +++ b/docs/man/memcached_last_error_message.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_LAST_ERROR_MESSAGE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_LAST_ERROR_MESSAGE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_last_error_message \- libmemcached Documentation . diff --git a/docs/man/memcached_lib_version.3 b/docs/man/memcached_lib_version.3 index 9791123a..174a91b3 100644 --- a/docs/man/memcached_lib_version.3 +++ b/docs/man/memcached_lib_version.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_LIB_VERSION" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_LIB_VERSION" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_lib_version \- libmemcached Documentation . diff --git a/docs/man/memcached_memory_allocators.3 b/docs/man/memcached_memory_allocators.3 index 6a8591f8..c6552666 100644 --- a/docs/man/memcached_memory_allocators.3 +++ b/docs/man/memcached_memory_allocators.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_MEMORY_ALLOCATORS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_MEMORY_ALLOCATORS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_memory_allocators \- libmemcached Documentation . diff --git a/docs/man/memcached_mget.3 b/docs/man/memcached_mget.3 index 505d3d44..ec59db80 100644 --- a/docs/man/memcached_mget.3 +++ b/docs/man/memcached_mget.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_MGET" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_MGET" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_mget \- Retrieving data from the server . diff --git a/docs/man/memcached_mget_by_key.3 b/docs/man/memcached_mget_by_key.3 index a180538a..00aee8e0 100644 --- a/docs/man/memcached_mget_by_key.3 +++ b/docs/man/memcached_mget_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_MGET_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_MGET_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_mget_by_key \- Retrieving data from the server . diff --git a/docs/man/memcached_mget_execute.3 b/docs/man/memcached_mget_execute.3 index 10c7b41a..5df2eb33 100644 --- a/docs/man/memcached_mget_execute.3 +++ b/docs/man/memcached_mget_execute.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_MGET_EXECUTE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_MGET_EXECUTE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_mget_execute \- Retrieving data from the server . diff --git a/docs/man/memcached_mget_execute_by_key.3 b/docs/man/memcached_mget_execute_by_key.3 index d3959104..7da61ad1 100644 --- a/docs/man/memcached_mget_execute_by_key.3 +++ b/docs/man/memcached_mget_execute_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_MGET_EXECUTE_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_MGET_EXECUTE_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_mget_execute_by_key \- Retrieving data from the server . diff --git a/docs/man/memcached_pool.3 b/docs/man/memcached_pool.3 index 52e0f184..4717009a 100644 --- a/docs/man/memcached_pool.3 +++ b/docs/man/memcached_pool.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_POOL" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_POOL" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_pool \- libmemcached Documentation . diff --git a/docs/man/memcached_pool_behavior_get.3 b/docs/man/memcached_pool_behavior_get.3 index a89ea145..01753f06 100644 --- a/docs/man/memcached_pool_behavior_get.3 +++ b/docs/man/memcached_pool_behavior_get.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_POOL_BEHAVIOR_GET" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_POOL_BEHAVIOR_GET" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_pool_behavior_get \- libmemcached Documentation . diff --git a/docs/man/memcached_pool_behavior_set.3 b/docs/man/memcached_pool_behavior_set.3 index a72b64d6..eff8dfe5 100644 --- a/docs/man/memcached_pool_behavior_set.3 +++ b/docs/man/memcached_pool_behavior_set.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_POOL_BEHAVIOR_SET" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_POOL_BEHAVIOR_SET" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_pool_behavior_set \- libmemcached Documentation . diff --git a/docs/man/memcached_pool_create.3 b/docs/man/memcached_pool_create.3 index 9c66446b..2edaa5a7 100644 --- a/docs/man/memcached_pool_create.3 +++ b/docs/man/memcached_pool_create.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_POOL_CREATE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_POOL_CREATE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_pool_create \- libmemcached Documentation . diff --git a/docs/man/memcached_pool_destroy.3 b/docs/man/memcached_pool_destroy.3 index 5cb7bb93..5425e0de 100644 --- a/docs/man/memcached_pool_destroy.3 +++ b/docs/man/memcached_pool_destroy.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_POOL_DESTROY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_POOL_DESTROY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_pool_destroy \- libmemcached Documentation . diff --git a/docs/man/memcached_pool_fetch.3 b/docs/man/memcached_pool_fetch.3 index 60194802..d404601c 100644 --- a/docs/man/memcached_pool_fetch.3 +++ b/docs/man/memcached_pool_fetch.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_POOL_FETCH" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_POOL_FETCH" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_pool_fetch \- libmemcached Documentation . diff --git a/docs/man/memcached_pool_pop.3 b/docs/man/memcached_pool_pop.3 index e130d1e4..d3b90917 100644 --- a/docs/man/memcached_pool_pop.3 +++ b/docs/man/memcached_pool_pop.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_POOL_POP" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_POOL_POP" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_pool_pop \- libmemcached Documentation . diff --git a/docs/man/memcached_pool_push.3 b/docs/man/memcached_pool_push.3 index 7ebb7f6d..e75e7b05 100644 --- a/docs/man/memcached_pool_push.3 +++ b/docs/man/memcached_pool_push.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_POOL_PUSH" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_POOL_PUSH" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_pool_push \- libmemcached Documentation . diff --git a/docs/man/memcached_pool_release.3 b/docs/man/memcached_pool_release.3 index 0f05ab82..d5db78be 100644 --- a/docs/man/memcached_pool_release.3 +++ b/docs/man/memcached_pool_release.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_POOL_RELEASE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_POOL_RELEASE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_pool_release \- libmemcached Documentation . diff --git a/docs/man/memcached_pool_st.3 b/docs/man/memcached_pool_st.3 index 931742fb..133f8bd6 100644 --- a/docs/man/memcached_pool_st.3 +++ b/docs/man/memcached_pool_st.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_POOL_ST" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_POOL_ST" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_pool_st \- libmemcached Documentation . diff --git a/docs/man/memcached_prepend.3 b/docs/man/memcached_prepend.3 index 514acc6a..500cd34e 100644 --- a/docs/man/memcached_prepend.3 +++ b/docs/man/memcached_prepend.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_PREPEND" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_PREPEND" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_prepend \- Appending to or Prepending to data on the server . diff --git a/docs/man/memcached_prepend_by_key.3 b/docs/man/memcached_prepend_by_key.3 index 27d4da33..3cddecd2 100644 --- a/docs/man/memcached_prepend_by_key.3 +++ b/docs/man/memcached_prepend_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_PREPEND_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_PREPEND_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_prepend_by_key \- Appending to or Prepending to data on the server . diff --git a/docs/man/memcached_quit.3 b/docs/man/memcached_quit.3 index afbc7439..64fa1fc6 100644 --- a/docs/man/memcached_quit.3 +++ b/docs/man/memcached_quit.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_QUIT" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_QUIT" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_quit \- libmemcached Documentation . diff --git a/docs/man/memcached_replace.3 b/docs/man/memcached_replace.3 index e87b6275..71c9a111 100644 --- a/docs/man/memcached_replace.3 +++ b/docs/man/memcached_replace.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_REPLACE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_REPLACE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_replace \- Storing and Replacing Data . diff --git a/docs/man/memcached_replace_by_key.3 b/docs/man/memcached_replace_by_key.3 index 07ca2111..7a23171f 100644 --- a/docs/man/memcached_replace_by_key.3 +++ b/docs/man/memcached_replace_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_REPLACE_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_REPLACE_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_replace_by_key \- Storing and Replacing Data . diff --git a/docs/man/memcached_result_cas.3 b/docs/man/memcached_result_cas.3 index ff671d25..bcf979d7 100644 --- a/docs/man/memcached_result_cas.3 +++ b/docs/man/memcached_result_cas.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_RESULT_CAS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_RESULT_CAS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_result_cas \- Working with result sets . diff --git a/docs/man/memcached_result_create.3 b/docs/man/memcached_result_create.3 index a83b401f..341755b8 100644 --- a/docs/man/memcached_result_create.3 +++ b/docs/man/memcached_result_create.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_RESULT_CREATE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_RESULT_CREATE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_result_create \- Working with result sets . diff --git a/docs/man/memcached_result_flags.3 b/docs/man/memcached_result_flags.3 index 9f558828..4e20a625 100644 --- a/docs/man/memcached_result_flags.3 +++ b/docs/man/memcached_result_flags.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_RESULT_FLAGS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_RESULT_FLAGS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_result_flags \- Working with result sets . diff --git a/docs/man/memcached_result_free.3 b/docs/man/memcached_result_free.3 index 6e5eac13..c26ccdd7 100644 --- a/docs/man/memcached_result_free.3 +++ b/docs/man/memcached_result_free.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_RESULT_FREE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_RESULT_FREE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_result_free \- Working with result sets . diff --git a/docs/man/memcached_result_key_length.3 b/docs/man/memcached_result_key_length.3 index 66627ae8..f7cf8732 100644 --- a/docs/man/memcached_result_key_length.3 +++ b/docs/man/memcached_result_key_length.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_RESULT_KEY_LENGTH" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_RESULT_KEY_LENGTH" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_result_key_length \- Working with result sets . diff --git a/docs/man/memcached_result_key_value.3 b/docs/man/memcached_result_key_value.3 index 8e699fee..012f12da 100644 --- a/docs/man/memcached_result_key_value.3 +++ b/docs/man/memcached_result_key_value.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_RESULT_KEY_VALUE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_RESULT_KEY_VALUE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_result_key_value \- Working with result sets . diff --git a/docs/man/memcached_result_length.3 b/docs/man/memcached_result_length.3 index edaab199..cbc1d623 100644 --- a/docs/man/memcached_result_length.3 +++ b/docs/man/memcached_result_length.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_RESULT_LENGTH" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_RESULT_LENGTH" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_result_length \- Working with result sets . diff --git a/docs/man/memcached_result_st.3 b/docs/man/memcached_result_st.3 index e2e1cc23..f042d1e5 100644 --- a/docs/man/memcached_result_st.3 +++ b/docs/man/memcached_result_st.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_RESULT_ST" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_RESULT_ST" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_result_st \- Working with result sets . diff --git a/docs/man/memcached_result_value.3 b/docs/man/memcached_result_value.3 index de2cbca6..45bc9d00 100644 --- a/docs/man/memcached_result_value.3 +++ b/docs/man/memcached_result_value.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_RESULT_VALUE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_RESULT_VALUE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_result_value \- Working with result sets . diff --git a/docs/man/memcached_return_t.3 b/docs/man/memcached_return_t.3 index b4cca7f0..e8499826 100644 --- a/docs/man/memcached_return_t.3 +++ b/docs/man/memcached_return_t.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_RETURN_T" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_RETURN_T" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_return_t \- Return type values . diff --git a/docs/man/memcached_sasl.3 b/docs/man/memcached_sasl.3 index 6bea77a1..b3b13588 100644 --- a/docs/man/memcached_sasl.3 +++ b/docs/man/memcached_sasl.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SASL" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SASL" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_sasl \- libmemcached Documentation . diff --git a/docs/man/memcached_sasl_set_auth_data.3 b/docs/man/memcached_sasl_set_auth_data.3 index d7653d39..b3573227 100644 --- a/docs/man/memcached_sasl_set_auth_data.3 +++ b/docs/man/memcached_sasl_set_auth_data.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SASL_SET_AUTH_DATA" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SASL_SET_AUTH_DATA" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_sasl_set_auth_data \- libmemcached Documentation . diff --git a/docs/man/memcached_server_add.3 b/docs/man/memcached_server_add.3 index 53bed572..b0d0cf4c 100644 --- a/docs/man/memcached_server_add.3 +++ b/docs/man/memcached_server_add.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVER_ADD" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVER_ADD" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_server_add \- libmemcached Documentation . diff --git a/docs/man/memcached_server_add_unix_socket.3 b/docs/man/memcached_server_add_unix_socket.3 index 66a17987..d5cf47d7 100644 --- a/docs/man/memcached_server_add_unix_socket.3 +++ b/docs/man/memcached_server_add_unix_socket.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVER_ADD_UNIX_SOCKET" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVER_ADD_UNIX_SOCKET" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_server_add_unix_socket \- libmemcached Documentation . diff --git a/docs/man/memcached_server_count.3 b/docs/man/memcached_server_count.3 index ac100003..ec53388c 100644 --- a/docs/man/memcached_server_count.3 +++ b/docs/man/memcached_server_count.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVER_COUNT" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVER_COUNT" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_server_count \- libmemcached Documentation . diff --git a/docs/man/memcached_server_cursor.3 b/docs/man/memcached_server_cursor.3 index 3854734d..ff775f6d 100644 --- a/docs/man/memcached_server_cursor.3 +++ b/docs/man/memcached_server_cursor.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVER_CURSOR" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVER_CURSOR" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_server_cursor \- libmemcached Documentation . diff --git a/docs/man/memcached_server_list.3 b/docs/man/memcached_server_list.3 index 1e3551ee..914c7ee6 100644 --- a/docs/man/memcached_server_list.3 +++ b/docs/man/memcached_server_list.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVER_LIST" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVER_LIST" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_server_list \- libmemcached Documentation . diff --git a/docs/man/memcached_server_list_append.3 b/docs/man/memcached_server_list_append.3 index 8e0a82a8..f63b339d 100644 --- a/docs/man/memcached_server_list_append.3 +++ b/docs/man/memcached_server_list_append.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVER_LIST_APPEND" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVER_LIST_APPEND" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_server_list_append \- libmemcached Documentation . diff --git a/docs/man/memcached_server_list_count.3 b/docs/man/memcached_server_list_count.3 index 54620257..cd572a2b 100644 --- a/docs/man/memcached_server_list_count.3 +++ b/docs/man/memcached_server_list_count.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVER_LIST_COUNT" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVER_LIST_COUNT" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_server_list_count \- libmemcached Documentation . diff --git a/docs/man/memcached_server_list_free.3 b/docs/man/memcached_server_list_free.3 index 916191e6..94007165 100644 --- a/docs/man/memcached_server_list_free.3 +++ b/docs/man/memcached_server_list_free.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVER_LIST_FREE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVER_LIST_FREE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_server_list_free \- libmemcached Documentation . diff --git a/docs/man/memcached_server_push.3 b/docs/man/memcached_server_push.3 index d2355e47..138c3091 100644 --- a/docs/man/memcached_server_push.3 +++ b/docs/man/memcached_server_push.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVER_PUSH" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVER_PUSH" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_server_push \- libmemcached Documentation . diff --git a/docs/man/memcached_server_st.3 b/docs/man/memcached_server_st.3 index f145981b..ddfb5043 100644 --- a/docs/man/memcached_server_st.3 +++ b/docs/man/memcached_server_st.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVER_ST" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVER_ST" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_server_st \- libmemcached Documentation . diff --git a/docs/man/memcached_servers.3 b/docs/man/memcached_servers.3 index e8e71261..f81fb8e9 100644 --- a/docs/man/memcached_servers.3 +++ b/docs/man/memcached_servers.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVERS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVERS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_servers \- libmemcached Documentation . diff --git a/docs/man/memcached_servers_parse.3 b/docs/man/memcached_servers_parse.3 index 564aab21..cafe4065 100644 --- a/docs/man/memcached_servers_parse.3 +++ b/docs/man/memcached_servers_parse.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVERS_PARSE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVERS_PARSE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_servers_parse \- libmemcached Documentation . diff --git a/docs/man/memcached_servers_reset.3 b/docs/man/memcached_servers_reset.3 index 821d7cb0..2b9c10a8 100644 --- a/docs/man/memcached_servers_reset.3 +++ b/docs/man/memcached_servers_reset.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SERVERS_RESET" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SERVERS_RESET" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_servers_reset \- libmemcached Documentation . diff --git a/docs/man/memcached_set.3 b/docs/man/memcached_set.3 index cab8b093..5b7d44d9 100644 --- a/docs/man/memcached_set.3 +++ b/docs/man/memcached_set.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SET" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SET" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_set \- Storing and Replacing Data . diff --git a/docs/man/memcached_set_by_key.3 b/docs/man/memcached_set_by_key.3 index bad62ad1..b25ee14a 100644 --- a/docs/man/memcached_set_by_key.3 +++ b/docs/man/memcached_set_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SET_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SET_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_set_by_key \- Storing and Replacing Data . diff --git a/docs/man/memcached_set_memory_allocators.3 b/docs/man/memcached_set_memory_allocators.3 index 2be6aef3..0c150493 100644 --- a/docs/man/memcached_set_memory_allocators.3 +++ b/docs/man/memcached_set_memory_allocators.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SET_MEMORY_ALLOCATORS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SET_MEMORY_ALLOCATORS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_set_memory_allocators \- libmemcached Documentation . diff --git a/docs/man/memcached_set_memory_allocators_context.3 b/docs/man/memcached_set_memory_allocators_context.3 index 88858595..387e9d93 100644 --- a/docs/man/memcached_set_memory_allocators_context.3 +++ b/docs/man/memcached_set_memory_allocators_context.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SET_MEMORY_ALLOCATORS_CONTEXT" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SET_MEMORY_ALLOCATORS_CONTEXT" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_set_memory_allocators_context \- libmemcached Documentation . diff --git a/docs/man/memcached_set_sasl_callbacks.3 b/docs/man/memcached_set_sasl_callbacks.3 index b8b679a4..02d50622 100644 --- a/docs/man/memcached_set_sasl_callbacks.3 +++ b/docs/man/memcached_set_sasl_callbacks.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SET_SASL_CALLBACKS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SET_SASL_CALLBACKS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_set_sasl_callbacks \- libmemcached Documentation . diff --git a/docs/man/memcached_set_user_data.3 b/docs/man/memcached_set_user_data.3 index e0e45aec..b2756e82 100644 --- a/docs/man/memcached_set_user_data.3 +++ b/docs/man/memcached_set_user_data.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_SET_USER_DATA" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_SET_USER_DATA" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_set_user_data \- libmemcached Documentation . diff --git a/docs/man/memcached_stat.3 b/docs/man/memcached_stat.3 index acbc3f05..270ea12b 100644 --- a/docs/man/memcached_stat.3 +++ b/docs/man/memcached_stat.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_STAT" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_STAT" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_stat \- libmemcached Documentation . diff --git a/docs/man/memcached_stat_execute.3 b/docs/man/memcached_stat_execute.3 index a776b757..48b80af0 100644 --- a/docs/man/memcached_stat_execute.3 +++ b/docs/man/memcached_stat_execute.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_STAT_EXECUTE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_STAT_EXECUTE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_stat_execute \- libmemcached Documentation . diff --git a/docs/man/memcached_stat_get_keys.3 b/docs/man/memcached_stat_get_keys.3 index 6a3c079a..c88b723a 100644 --- a/docs/man/memcached_stat_get_keys.3 +++ b/docs/man/memcached_stat_get_keys.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_STAT_GET_KEYS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_STAT_GET_KEYS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_stat_get_keys \- libmemcached Documentation . diff --git a/docs/man/memcached_stat_get_value.3 b/docs/man/memcached_stat_get_value.3 index 80834d2f..9229b981 100644 --- a/docs/man/memcached_stat_get_value.3 +++ b/docs/man/memcached_stat_get_value.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_STAT_GET_VALUE" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_STAT_GET_VALUE" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_stat_get_value \- libmemcached Documentation . diff --git a/docs/man/memcached_stat_servername.3 b/docs/man/memcached_stat_servername.3 index 2617d7e0..ee0a5023 100644 --- a/docs/man/memcached_stat_servername.3 +++ b/docs/man/memcached_stat_servername.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_STAT_SERVERNAME" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_STAT_SERVERNAME" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_stat_servername \- libmemcached Documentation . diff --git a/docs/man/memcached_stats.3 b/docs/man/memcached_stats.3 index 699ebf85..92a5dcdb 100644 --- a/docs/man/memcached_stats.3 +++ b/docs/man/memcached_stats.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_STATS" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_STATS" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_stats \- libmemcached Documentation . diff --git a/docs/man/memcached_strerror.3 b/docs/man/memcached_strerror.3 index b91a09e1..2e947309 100644 --- a/docs/man/memcached_strerror.3 +++ b/docs/man/memcached_strerror.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_STRERROR" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_STRERROR" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_strerror \- libmemcached Documentation . diff --git a/docs/man/memcached_touch.3 b/docs/man/memcached_touch.3 index 57db893b..e4c2df07 100644 --- a/docs/man/memcached_touch.3 +++ b/docs/man/memcached_touch.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_TOUCH" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_TOUCH" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_touch \- libmemcached Documentation . diff --git a/docs/man/memcached_touch_by_key.3 b/docs/man/memcached_touch_by_key.3 index f1d0b11c..5fa1dc51 100644 --- a/docs/man/memcached_touch_by_key.3 +++ b/docs/man/memcached_touch_by_key.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_TOUCH_BY_KEY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_TOUCH_BY_KEY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_touch_by_key \- libmemcached Documentation . diff --git a/docs/man/memcached_user_data.3 b/docs/man/memcached_user_data.3 index d9852413..e0408ca6 100644 --- a/docs/man/memcached_user_data.3 +++ b/docs/man/memcached_user_data.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_USER_DATA" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_USER_DATA" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_user_data \- libmemcached Documentation . diff --git a/docs/man/memcached_verbosity.3 b/docs/man/memcached_verbosity.3 index 2484cfad..5f0438d0 100644 --- a/docs/man/memcached_verbosity.3 +++ b/docs/man/memcached_verbosity.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_VERBOSITY" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_VERBOSITY" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_verbosity \- libmemcached Documentation . diff --git a/docs/man/memcached_version.3 b/docs/man/memcached_version.3 index cf06a1e3..78ac2816 100644 --- a/docs/man/memcached_version.3 +++ b/docs/man/memcached_version.3 @@ -1,4 +1,4 @@ -.TH "MEMCACHED_VERSION" "3" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCACHED_VERSION" "3" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcached_version \- libmemcached Documentation . diff --git a/docs/man/memcapable.1 b/docs/man/memcapable.1 index 662ba8b6..6769d879 100644 --- a/docs/man/memcapable.1 +++ b/docs/man/memcapable.1 @@ -1,4 +1,4 @@ -.TH "MEMCAPABLE" "1" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCAPABLE" "1" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcapable \- libmemcached Documentation . diff --git a/docs/man/memcat.1 b/docs/man/memcat.1 index b3384f7c..fa9e822e 100644 --- a/docs/man/memcat.1 +++ b/docs/man/memcat.1 @@ -1,4 +1,4 @@ -.TH "MEMCAT" "1" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCAT" "1" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcat \- libmemcached Documentation . diff --git a/docs/man/memcp.1 b/docs/man/memcp.1 index 2f739a23..a2acd965 100644 --- a/docs/man/memcp.1 +++ b/docs/man/memcp.1 @@ -1,4 +1,4 @@ -.TH "MEMCP" "1" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMCP" "1" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memcp \- libmemcached Documentation . diff --git a/docs/man/memdump.1 b/docs/man/memdump.1 index 2b0c3745..cfef414e 100644 --- a/docs/man/memdump.1 +++ b/docs/man/memdump.1 @@ -1,4 +1,4 @@ -.TH "MEMDUMP" "1" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMDUMP" "1" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memdump \- libmemcached Documentation . diff --git a/docs/man/memerror.1 b/docs/man/memerror.1 index 9d1bd9a5..51e97fb9 100644 --- a/docs/man/memerror.1 +++ b/docs/man/memerror.1 @@ -1,4 +1,4 @@ -.TH "MEMERROR" "1" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMERROR" "1" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memerror \- libmemcached Documentation . diff --git a/docs/man/memflush.1 b/docs/man/memflush.1 index 99c70a0e..05d297c2 100644 --- a/docs/man/memflush.1 +++ b/docs/man/memflush.1 @@ -1,4 +1,4 @@ -.TH "MEMFLUSH" "1" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMFLUSH" "1" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memflush \- libmemcached Documentation . diff --git a/docs/man/memrm.1 b/docs/man/memrm.1 index 5dc9b798..6c6ab403 100644 --- a/docs/man/memrm.1 +++ b/docs/man/memrm.1 @@ -1,4 +1,4 @@ -.TH "MEMRM" "1" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMRM" "1" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memrm \- libmemcached Documentation . diff --git a/docs/man/memslap.1 b/docs/man/memslap.1 index 0119e34b..aca06e0f 100644 --- a/docs/man/memslap.1 +++ b/docs/man/memslap.1 @@ -1,4 +1,4 @@ -.TH "MEMSLAP" "1" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMSLAP" "1" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memslap \- libmemcached Documentation . diff --git a/docs/man/memstat.1 b/docs/man/memstat.1 index 58c36931..f8b4dc25 100644 --- a/docs/man/memstat.1 +++ b/docs/man/memstat.1 @@ -1,4 +1,4 @@ -.TH "MEMSTAT" "1" "March 23, 2012" "1.0.5" "libmemcached" +.TH "MEMSTAT" "1" "April 02, 2012" "1.0.5" "libmemcached" .SH NAME memstat \- libmemcached Documentation . diff --git a/libmemcached-1.0/struct/server.h b/libmemcached-1.0/struct/server.h index 245b4b9b..e2be59b8 100644 --- a/libmemcached-1.0/struct/server.h +++ b/libmemcached-1.0/struct/server.h @@ -82,6 +82,7 @@ struct memcached_server_st { struct { uint32_t read; uint32_t write; + uint32_t timeouts; } io_wait_count; uint8_t major_version; // Default definition of UINT8_MAX means that it has not been set. uint8_t micro_version; // ditto diff --git a/libmemcached/connect.cc b/libmemcached/connect.cc index 8434ba8b..9d50e5c0 100644 --- a/libmemcached/connect.cc +++ b/libmemcached/connect.cc @@ -78,6 +78,7 @@ static memcached_return_t connect_poll(memcached_server_st *server) } case 0: { + server->io_wait_count.timeouts++; return memcached_set_error(*server, MEMCACHED_TIMEOUT, MEMCACHED_AT); } diff --git a/libmemcached/dump.cc b/libmemcached/dump.cc index 5ba4ce16..8a2ba144 100644 --- a/libmemcached/dump.cc +++ b/libmemcached/dump.cc @@ -77,7 +77,7 @@ static memcached_return_t ascii_dump(memcached_st *memc, memcached_dump_fn *call } else { - return memcached_set_error(*instance, vdo_rc, MEMCACHED_AT); + return vdo_rc; } } @@ -128,7 +128,7 @@ static memcached_return_t ascii_dump(memcached_st *memc, memcached_dump_fn *call else { // IO error of some sort must have occurred - return memcached_set_error(*instance, response_rc, MEMCACHED_AT); + return response_rc; } } } diff --git a/libmemcached/io.cc b/libmemcached/io.cc index 049c436d..94686d05 100644 --- a/libmemcached/io.cc +++ b/libmemcached/io.cc @@ -153,7 +153,9 @@ static bool process_input_buffer(memcached_server_write_instance_st ptr) { error= (*cb.callback[x])(ptr->root, &root->result, cb.context); if (error != MEMCACHED_SUCCESS) + { break; + } } /* @todo what should I do with the error message??? */ @@ -168,20 +170,6 @@ static bool process_input_buffer(memcached_server_write_instance_st ptr) static memcached_return_t io_wait(memcached_server_write_instance_st ptr, const memc_read_or_write read_or_write) { - struct pollfd fds; - fds.fd= ptr->fd; - fds.events= POLLIN; - - if (read_or_write == MEM_WRITE) /* write */ - { - fds.events= POLLOUT; - WATCHPOINT_SET(ptr->io_wait_count.write++); - } - else - { - WATCHPOINT_SET(ptr->io_wait_count.read++); - } - /* ** We are going to block on write, but at least on Solaris we might block ** on write if we haven't read anything from our input buffer.. @@ -198,6 +186,21 @@ static memcached_return_t io_wait(memcached_server_write_instance_st ptr, } } + struct pollfd fds; + memset(&fds, 0, sizeof(pollfd)); + fds.fd= ptr->fd; + fds.events= POLLIN; + + if (read_or_write == MEM_WRITE) /* write */ + { + fds.events= POLLOUT; + ptr->io_wait_count.write++; + } + else + { + ptr->io_wait_count.read++; + } + if (ptr->root->poll_timeout == 0) // Mimic 0 causes timeout behavior (not all platforms do this) { return memcached_set_error(*ptr, MEMCACHED_TIMEOUT, MEMCACHED_AT); @@ -206,21 +209,20 @@ static memcached_return_t io_wait(memcached_server_write_instance_st ptr, size_t loop_max= 5; while (--loop_max) // While loop is for ERESTART or EINTR { + int active_fd= poll(&fds, 1, ptr->root->poll_timeout); + assert_msg(active_fd <= 1 , "poll() returned an unexpected value"); - int error= poll(&fds, 1, ptr->root->poll_timeout); - switch (error) + if (active_fd == 1) { - case 1: // Success! - WATCHPOINT_IF_LABELED_NUMBER(read_or_write && loop_max < 4, "read() times we had to loop, decremented down from 5", loop_max); - WATCHPOINT_IF_LABELED_NUMBER(!read_or_write && loop_max < 4, "write() times we had to loop, decremented down from 5", loop_max); - return MEMCACHED_SUCCESS; - - case 0: // Timeout occured, we let the while() loop do its thing. + } + else if (active_fd == 0) + { + ptr->io_wait_count.timeouts++; return memcached_set_error(*ptr, MEMCACHED_TIMEOUT, MEMCACHED_AT); - - default: - WATCHPOINT_ERRNO(get_socket_errno()); + } + else // -1 + { switch (get_socket_errno()) { #ifdef TARGET_OS_LINUX @@ -237,24 +239,20 @@ static memcached_return_t io_wait(memcached_server_write_instance_st ptr, return memcached_set_error(*ptr, MEMCACHED_MEMORY_ALLOCATION_FAILURE, MEMCACHED_AT, memcached_literal_param("RLIMIT_NOFILE exceeded, or if OSX the timeout value was invalid")); default: + int local_errno= get_socket_errno(); // We cache in case memcached_quit_server() modifies errno if (fds.revents & POLLERR) { int err; socklen_t len= sizeof (err); if (getsockopt(ptr->fd, SOL_SOCKET, SO_ERROR, &err, &len) == 0) { - if (err == 0) + if (err == 0) // treat this as EINTR { continue; } - errno= err; + local_errno= err; } } - else - { - memcached_set_errno(*ptr, get_socket_errno(), MEMCACHED_AT); - } - int local_errno= get_socket_errno(); // We cache in case memcached_quit_server() modifies errno memcached_quit_server(ptr, true); return memcached_set_errno(*ptr, local_errno, MEMCACHED_AT); @@ -349,6 +347,7 @@ static bool io_flush(memcached_server_write_instance_st ptr, } else if (rc == MEMCACHED_TIMEOUT) { + ptr->io_wait_count.timeouts++; error= memcached_set_error(*ptr, MEMCACHED_TIMEOUT, MEMCACHED_AT); return false; } @@ -401,7 +400,7 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr, while (length) { - if (not ptr->read_buffer_length) + if (ptr->read_buffer_length == 0) { ssize_t data_read; do @@ -422,11 +421,15 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr, #ifdef TARGET_OS_LINUX case ERESTART: #endif - if (memcached_success(io_wait(ptr, MEM_READ))) { - continue; + memcached_return_t io_wait_ret; + if (memcached_success(io_wait_ret= io_wait(ptr, MEM_READ))) + { + continue; + } + + return io_wait_ret; } - return MEMCACHED_IN_PROGRESS; /* fall through */ @@ -600,7 +603,7 @@ static ssize_t _io_write(memcached_server_write_instance_st ptr, } } - return (ssize_t) original_length; + return ssize_t(original_length); } bool memcached_io_write(memcached_server_write_instance_st ptr) diff --git a/libmemcached/quit.cc b/libmemcached/quit.cc index 9aadd605..2cfc44b5 100644 --- a/libmemcached/quit.cc +++ b/libmemcached/quit.cc @@ -79,8 +79,6 @@ void memcached_quit_server(memcached_server_st *ptr, bool io_death) rc= memcached_vdo(ptr, vector, 1, true); } - WATCHPOINT_ASSERT(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_FETCH_NOTFINISHED); - /* read until socket is closed, or there is an error * closing the socket before all data is read * results in server throwing away all data which is @@ -89,11 +87,18 @@ void memcached_quit_server(memcached_server_st *ptr, bool io_death) * In .40 we began to only do this if we had been doing buffered * requests of had replication enabled. */ - if (ptr->root->flags.buffer_requests or ptr->root->number_of_replicas) + if (memcached_success(rc) and (ptr->root->flags.buffer_requests or ptr->root->number_of_replicas)) { - memcached_return_t rc_slurp; - while (memcached_continue(rc_slurp= memcached_io_slurp(ptr))) {} ; - WATCHPOINT_ASSERT(rc_slurp == MEMCACHED_CONNECTION_FAILURE); + if (0) + { + memcached_return_t rc_slurp; + while (memcached_continue(rc_slurp= memcached_io_slurp(ptr))) {} ; + WATCHPOINT_ASSERT(rc_slurp == MEMCACHED_CONNECTION_FAILURE); + } + else + { + memcached_io_slurp(ptr); + } } /* diff --git a/libmemcached/server.cc b/libmemcached/server.cc index b742f7ef..f2f78211 100644 --- a/libmemcached/server.cc +++ b/libmemcached/server.cc @@ -55,8 +55,9 @@ static inline void _server_init(memcached_server_st *self, memcached_st *root, self->server_failure_counter= 0; self->server_failure_counter_query_id= 0; self->weight= weight ? weight : 1; // 1 is the default weight value - WATCHPOINT_SET(self->io_wait_count.read= 0); - WATCHPOINT_SET(self->io_wait_count.write= 0); + self->io_wait_count.read= 0; + self->io_wait_count.write= 0; + self->io_wait_count.timeouts= 0; self->major_version= UINT8_MAX; self->micro_version= UINT8_MAX; self->minor_version= UINT8_MAX; @@ -310,8 +311,10 @@ void memcached_server_error_reset(memcached_server_st *self) memcached_server_instance_st memcached_server_get_last_disconnect(const memcached_st *self) { WATCHPOINT_ASSERT(self); - if (not self) + if (self == NULL) + { return 0; + } return self->last_disconnected_server; } @@ -319,8 +322,10 @@ memcached_server_instance_st memcached_server_get_last_disconnect(const memcache uint32_t memcached_servers_set_count(memcached_server_st *servers, uint32_t count) { WATCHPOINT_ASSERT(servers); - if (not servers) + if (servers == NULL) + { return 0; + } return servers->number_of_hosts= count; } @@ -328,7 +333,7 @@ uint32_t memcached_servers_set_count(memcached_server_st *servers, uint32_t coun uint32_t memcached_server_count(const memcached_st *self) { WATCHPOINT_ASSERT(self); - if (not self) + if (self == NULL) return 0; return self->number_of_hosts; @@ -337,7 +342,7 @@ uint32_t memcached_server_count(const memcached_st *self) const char *memcached_server_name(const memcached_server_instance_st self) { WATCHPOINT_ASSERT(self); - if (not self) + if (self == NULL) return NULL; return self->hostname; @@ -346,7 +351,7 @@ const char *memcached_server_name(const memcached_server_instance_st self) in_port_t memcached_server_port(const memcached_server_instance_st self) { WATCHPOINT_ASSERT(self); - if (not self) + if (self == NULL) return 0; return self->port; @@ -355,7 +360,7 @@ in_port_t memcached_server_port(const memcached_server_instance_st self) uint32_t memcached_server_response_count(const memcached_server_instance_st self) { WATCHPOINT_ASSERT(self); - if (not self) + if (self == NULL) return 0; return self->cursor_active; diff --git a/libmemcached/storage.cc b/libmemcached/storage.cc index 1b3dbcdd..1d75eb9a 100644 --- a/libmemcached/storage.cc +++ b/libmemcached/storage.cc @@ -175,10 +175,12 @@ static memcached_return_t memcached_send_binary(memcached_st *ptr, { memcached_io_reset(server); +#if 0 if (memcached_has_error(ptr)) { memcached_set_error(*server, rc, MEMCACHED_AT); } +#endif return MEMCACHED_WRITE_FAILURE; } @@ -319,10 +321,12 @@ static memcached_return_t memcached_send_ascii(memcached_st *ptr, } assert(memcached_failed(rc)); +#if 0 if (memcached_has_error(ptr) == false) { return memcached_set_error(*ptr, rc, MEMCACHED_AT); } +#endif return rc; } @@ -403,10 +407,6 @@ memcached_return_t memcached_add(memcached_st *ptr, key, key_length, value, value_length, expiration, flags, 0, ADD_OP); - if (rc == MEMCACHED_NOTSTORED or rc == MEMCACHED_DATA_EXISTS) - { - memcached_set_error(*ptr, rc, MEMCACHED_AT); - } LIBMEMCACHED_MEMCACHED_ADD_END(); return rc; } diff --git a/libtest/blobslap_worker.cc b/libtest/blobslap_worker.cc index caddbdd7..f3419620 100644 --- a/libtest/blobslap_worker.cc +++ b/libtest/blobslap_worker.cc @@ -49,7 +49,7 @@ class BlobslapWorker : public Server private: public: BlobslapWorker(in_port_t port_arg) : - Server("localhost", port_arg) + Server("localhost", port_arg, "benchmark/blobslap_worker", true) { set_pid_file(); } @@ -118,16 +118,6 @@ public: return "blobslap_worker"; }; - const char *executable() - { - return "benchmark/blobslap_worker"; - } - - const char *daemon_file_option() - { - return "--daemon"; - } - bool has_port_option() const { return true; diff --git a/libtest/cmdline.cc b/libtest/cmdline.cc index e774113a..f6d1e3d6 100644 --- a/libtest/cmdline.cc +++ b/libtest/cmdline.cc @@ -30,6 +30,7 @@ using namespace libtest; #include #include #include +#include #include #include #include @@ -108,6 +109,9 @@ Application::Application(const std::string& arg, const bool _use_libtool_arg) : _use_gdb(false), _argc(0), _exectuble(arg), + stdin_fd(STDIN_FILENO), + stdout_fd(STDOUT_FILENO), + stderr_fd(STDERR_FILENO), built_argv(NULL), _pid(-1) { @@ -115,7 +119,7 @@ Application::Application(const std::string& arg, const bool _use_libtool_arg) : { if (libtool() == NULL) { - throw "libtool requested, but know libtool was found"; + fatal_message("libtool requested, but know libtool was found"); } } @@ -142,6 +146,7 @@ Application::Application(const std::string& arg, const bool _use_libtool_arg) : Application::~Application() { + murder(); delete_argv(); } @@ -156,9 +161,16 @@ Application::error_t Application::run(const char *args[]) posix_spawn_file_actions_t file_actions; posix_spawn_file_actions_init(&file_actions); - stdin_fd.dup_for_spawn(Application::Pipe::READ, file_actions, STDIN_FILENO); - stdout_fd.dup_for_spawn(Application::Pipe::WRITE, file_actions, STDOUT_FILENO); - stderr_fd.dup_for_spawn(Application::Pipe::WRITE, file_actions, STDERR_FILENO); + stdin_fd.dup_for_spawn(Application::Pipe::READ, file_actions); + stdout_fd.dup_for_spawn(Application::Pipe::WRITE, file_actions); + stderr_fd.dup_for_spawn(Application::Pipe::WRITE, file_actions); + + posix_spawnattr_t spawnattr; + posix_spawnattr_init(&spawnattr); + + sigset_t set; + sigemptyset(&set); + fatal_assert(posix_spawnattr_setsigmask(&spawnattr, &set) == 0); create_argv(args); @@ -197,7 +209,7 @@ Application::error_t Application::run(const char *args[]) const_cast(_exectuble_with_path.c_str()), 0}; - spawn_ret= posix_spawnp(&_pid, libtool(), &file_actions, NULL, argv, NULL); + spawn_ret= posix_spawnp(&_pid, libtool(), &file_actions, &spawnattr, argv, NULL); } else { @@ -210,22 +222,23 @@ Application::error_t Application::run(const char *args[]) const_cast(gdb_run_file.c_str()), const_cast(_exectuble_with_path.c_str()), 0}; - spawn_ret= posix_spawnp(&_pid, "gdb", &file_actions, NULL, argv, NULL); + spawn_ret= posix_spawnp(&_pid, "gdb", &file_actions, &spawnattr, argv, NULL); } } else { if (_use_libtool) { - spawn_ret= posix_spawn(&_pid, built_argv[0], &file_actions, NULL, built_argv, NULL); + spawn_ret= posix_spawn(&_pid, built_argv[0], &file_actions, &spawnattr, built_argv, NULL); } else { - spawn_ret= posix_spawnp(&_pid, built_argv[0], &file_actions, NULL, built_argv, NULL); + spawn_ret= posix_spawnp(&_pid, built_argv[0], &file_actions, &spawnattr, built_argv, NULL); } } posix_spawn_file_actions_destroy(&file_actions); + posix_spawnattr_destroy(&spawnattr); stdin_fd.close(Application::Pipe::READ); stdout_fd.close(Application::Pipe::WRITE); @@ -233,81 +246,169 @@ Application::error_t Application::run(const char *args[]) if (spawn_ret) { + _pid= -1; return Application::INVALID; } return Application::SUCCESS; } -Application::error_t Application::wait() +bool Application::check() const { - if (_pid == -1) + if (_pid > 1 and kill(_pid, 0) == 0) { - Error << "wait() got an invalid pid_t"; - return Application::INVALID; + return true; } + return false; +} + +void Application::murder() +{ + if (check()) { - ssize_t read_length; - char buffer[1024]= { 0 }; - bool bail= false; - while (((read_length= ::read(stdout_fd.fd()[0], buffer, sizeof(buffer))) != 0) or bail) + int count= 5; + while ((count--) > 0 and check()) { - if (read_length == -1) + int kill_ret= kill(_pid, SIGTERM); + if (kill_ret == 0) { - switch(errno) + int status= 0; + pid_t waitpid_ret; + if ((waitpid_ret= waitpid(_pid, &status, WNOHANG)) == -1) { - case EAGAIN: - continue; + switch (errno) + { + case ECHILD: + case EINTR: + break; + + default: + Error << "waitpid() failed after kill with error of " << strerror(errno); + break; + } + } - default: - Error << strerror(errno); - bail= true; + if (waitpid_ret == 0) + { + libtest::dream(1, 0); } } - _stdout_buffer.reserve(read_length +1); - for (size_t x= 0; x < read_length; x++) + else { - _stdout_buffer.push_back(buffer[x]); + Error << "kill(pid, SIGTERM) failed after kill with error of " << strerror(errno); + continue; } - // @todo Suck up all output code here + + break; + } + + // If for whatever reason it lives, kill it hard + if (check()) + { + (void)kill(_pid, SIGKILL); } } + slurp(); +} +// false means that no data was returned +bool Application::slurp() +{ + struct pollfd fds[2]; + fds[0].fd= stdout_fd.fd(); + fds[0].events= POLLRDNORM; + fds[0].revents= 0; + fds[1].fd= stderr_fd.fd(); + fds[1].events= POLLRDNORM; + fds[1].revents= 0; + + int active_fd; + if ((active_fd= poll(fds, 2, 0)) == -1) { - ssize_t read_length; - char buffer[1024]= { 0 }; - bool bail= false; - while (((read_length= ::read(stderr_fd.fd()[0], buffer, sizeof(buffer))) != 0) or bail) + int error; + switch ((error= errno)) { - if (read_length == -1) - { - switch(errno) - { - case EAGAIN: - continue; +#ifdef TARGET_OS_LINUX + case ERESTART: +#endif + case EINTR: + break; - default: - Error << strerror(errno); - bail= true; - } - } - _stderr_buffer.reserve(read_length +1); - for (size_t x= 0; x < read_length; x++) - { - _stderr_buffer.push_back(buffer[x]); - } - // @todo Suck up all errput code here + case EFAULT: + case ENOMEM: + fatal_message(strerror(error)); + break; + + case EINVAL: + fatal_message("RLIMIT_NOFILE exceeded, or if OSX the timeout value was invalid"); + break; + + default: + fatal_message(strerror(error)); + break; } + + return false; + } + + if (active_fd == 0) + { + return false; } + bool data_was_read= false; + if (fds[0].revents & POLLRDNORM) + { + if (stdout_fd.read(_stdout_buffer) == true) + { + data_was_read= true; + } + } + + if (fds[1].revents & POLLRDNORM) + { + if (stderr_fd.read(_stderr_buffer) == true) + { + data_was_read= true; + } + } + + return data_was_read; +} + +Application::error_t Application::wait(bool nohang) +{ + if (_pid == -1) + { + return Application::INVALID; + } + + slurp(); + error_t exit_code= FAILURE; { int status= 0; pid_t waited_pid; - if ((waited_pid= waitpid(_pid, &status, 0)) == -1) + if ((waited_pid= waitpid(_pid, &status, nohang ? WNOHANG : 0)) == -1) + { + switch (errno) + { + case ECHILD: + exit_code= Application::SUCCESS; + break; + + case EINTR: + break; + + default: + Error << "Error occured while waitpid(" << strerror(errno) << ") on pid " << int(_pid); + break; + } + } + else if (waited_pid == 0) { - Error << "Error occured while waitpid(" << strerror(errno) << ") on pid " << int(_pid); + exit_code= Application::SUCCESS; } else { @@ -319,6 +420,8 @@ Application::error_t Application::wait() } } + slurp(); + #if 0 if (exit_code == Application::INVALID) { @@ -329,6 +432,13 @@ Application::error_t Application::wait() return exit_code; } +void Application::add_long_option(const std::string& name, const std::string& option_value) +{ + std::string arg(name); + arg+= option_value; + _options.push_back(std::make_pair(arg, std::string())); +} + void Application::add_option(const std::string& arg) { _options.push_back(std::make_pair(arg, std::string())); @@ -339,12 +449,81 @@ void Application::add_option(const std::string& name, const std::string& value) _options.push_back(std::make_pair(name, value)); } -Application::Pipe::Pipe() +Application::Pipe::Pipe(int arg) : + _std_fd(arg) +{ + _pipe_fd[READ]= -1; + _pipe_fd[WRITE]= -1; + _open[READ]= false; + _open[WRITE]= false; +} + +int Application::Pipe::Pipe::fd() { - _fd[0]= -1; - _fd[1]= -1; - _open[0]= false; - _open[1]= false; + if (_std_fd == STDOUT_FILENO) + { + return _pipe_fd[READ]; + } + else if (_std_fd == STDERR_FILENO) + { + return _pipe_fd[READ]; + } + + return _pipe_fd[WRITE]; // STDIN_FILENO +} + + +bool Application::Pipe::read(libtest::vchar_t& arg) +{ + fatal_assert(_std_fd == STDOUT_FILENO or _std_fd == STDERR_FILENO); + + bool data_was_read= false; + + ssize_t read_length; + char buffer[1024]= { 0 }; + while ((read_length= ::read(_pipe_fd[READ], buffer, sizeof(buffer)))) + { + if (read_length == -1) + { + switch(errno) + { + case EAGAIN: + break; + + default: + Error << strerror(errno); + break; + } + + break; + } + + data_was_read= true; + arg.reserve(read_length +1); + for (size_t x= 0; x < read_length; x++) + { + arg.push_back(buffer[x]); + } + // @todo Suck up all errput code here + } + + return data_was_read; +} + +void Application::Pipe::nonblock() +{ + int ret; + if ((ret= fcntl(_pipe_fd[READ], F_GETFL, 0)) == -1) + { + Error << "fcntl(F_GETFL) " << strerror(errno); + throw strerror(errno); + } + + if ((ret= fcntl(_pipe_fd[READ], F_SETFL, ret | O_NONBLOCK)) == -1) + { + Error << "fcntl(F_SETFL) " << strerror(errno); + throw strerror(errno); + } } void Application::Pipe::reset() @@ -352,26 +531,37 @@ void Application::Pipe::reset() close(READ); close(WRITE); - int ret; - if (pipe(_fd) == -1) +#if _GNU_SOURCE + if (pipe2(_pipe_fd, O_NONBLOCK) == -1) +#else + if (pipe(_pipe_fd) == -1) +#endif { - throw strerror(errno); + fatal_message(strerror(errno)); } _open[0]= true; _open[1]= true; + if (true) { - if ((ret= fcntl(_fd[0], F_GETFL, 0)) == -1) - { - Error << "fcntl(F_GETFL) " << strerror(errno); - throw strerror(errno); - } + nonblock(); + cloexec(); + } +} - if ((ret= fcntl(_fd[0], F_SETFL, ret | O_NONBLOCK)) == -1) - { - Error << "fcntl(F_SETFL) " << strerror(errno); - throw strerror(errno); - } +void Application::Pipe::cloexec() +{ + int ret; + if ((ret= fcntl(_pipe_fd[WRITE], F_GETFD, 0)) == -1) + { + Error << "fcntl(F_GETFD) " << strerror(errno); + throw strerror(errno); + } + + if ((ret= fcntl(_pipe_fd[WRITE], F_SETFD, ret | FD_CLOEXEC)) == -1) + { + Error << "fcntl(F_SETFD) " << strerror(errno); + throw strerror(errno); } } @@ -381,21 +571,21 @@ Application::Pipe::~Pipe() close(WRITE); } -void Application::Pipe::dup_for_spawn(const close_t& arg, posix_spawn_file_actions_t& file_actions, const int newfildes) +void Application::Pipe::dup_for_spawn(const close_t& arg, posix_spawn_file_actions_t& file_actions) { int type= int(arg); int ret; - if ((ret= posix_spawn_file_actions_adddup2(&file_actions, _fd[type], newfildes )) < 0) + if ((ret= posix_spawn_file_actions_adddup2(&file_actions, _pipe_fd[type], _std_fd )) < 0) { Error << "posix_spawn_file_actions_adddup2(" << strerror(ret) << ")"; - throw strerror(ret); + fatal_message(strerror(ret)); } - if ((ret= posix_spawn_file_actions_addclose(&file_actions, _fd[type])) < 0) + if ((ret= posix_spawn_file_actions_addclose(&file_actions, _pipe_fd[type])) < 0) { Error << "posix_spawn_file_actions_adddup2(" << strerror(ret) << ")"; - throw strerror(ret); + fatal_message(strerror(ret)); } } @@ -406,24 +596,27 @@ void Application::Pipe::close(const close_t& arg) if (_open[type]) { int ret; - if (::close(_fd[type]) == -1) + if (::close(_pipe_fd[type]) == -1) { Error << "close(" << strerror(errno) << ")"; } _open[type]= false; - _fd[type]= -1; + _pipe_fd[type]= -1; } } void Application::create_argv(const char *args[]) { - _argc= 2 +_use_libtool ? 2 : 0; // +1 for the command, +2 for libtool/mode=execute, +1 for the NULL + delete_argv(); + fatal_assert(_argc == 0); if (_use_libtool) { _argc+= 2; // +2 for libtool --mode=execute } + _argc+= 1; // For the command + /* valgrind --error-exitcode=1 --leak-check=yes --show-reachable=yes --track-fds=yes --malloc-fill=A5 --free-fill=DE */ @@ -453,7 +646,8 @@ void Application::create_argv(const char *args[]) } } - delete_argv(); + _argc+= 1; // for the NULL + built_argv= new char * [_argc]; size_t x= 0; @@ -500,7 +694,8 @@ void Application::create_argv(const char *args[]) built_argv[x++]= strdup(*ptr); } } - built_argv[_argc -1]= NULL; + built_argv[x++]= NULL; + fatal_assert(x == _argc); } std::string Application::print() @@ -551,7 +746,7 @@ int exec_cmdline(const std::string& command, const char *args[], bool use_libtoo return int(ret); } - return int(app.wait()); + return int(app.wait(false)); } const char *gearmand_binary() diff --git a/libtest/cmdline.h b/libtest/cmdline.h index f6da62be..a387bcf5 100644 --- a/libtest/cmdline.h +++ b/libtest/cmdline.h @@ -39,27 +39,28 @@ public: class Pipe { public: - Pipe(); + Pipe(int); ~Pipe(); - int* fd() - { - return _fd; - } + int fd(); enum close_t { - READ, - WRITE + READ= 0, + WRITE= 1 }; void reset(); void close(const close_t& arg); void dup_for_spawn(const close_t& arg, - posix_spawn_file_actions_t& file_actions, - const int newfildes); + posix_spawn_file_actions_t& file_actions); + + void nonblock(); + void cloexec(); + bool read(libtest::vchar_t&); private: - int _fd[2]; + const int _std_fd; + int _pipe_fd[2]; bool _open[2]; }; @@ -70,8 +71,9 @@ public: void add_option(const std::string&); void add_option(const std::string&, const std::string&); + void add_long_option(const std::string& option_name, const std::string& option_value); error_t run(const char *args[]= NULL); - error_t wait(); + error_t wait(bool nohang= true); libtest::vchar_t stdout_result() const { @@ -100,6 +102,11 @@ public: _use_valgrind= arg; } + bool check() const; + + bool slurp(); + void murder(); + void use_gdb(bool arg= true) { _use_gdb= arg; @@ -112,6 +119,11 @@ public: return _gdb_filename; } + pid_t pid() const + { + return _pid; + } + private: void create_argv(const char *args[]); void delete_argv(); diff --git a/libtest/comparison.cc b/libtest/comparison.cc index 121df252..a4c3736d 100644 --- a/libtest/comparison.cc +++ b/libtest/comparison.cc @@ -24,14 +24,44 @@ namespace libtest { -bool _in_valgrind(const char*, int, const char*) +bool valgrind_is_caller(void) { if (bool(getenv("TESTS_ENVIRONMENT")) and strstr(getenv("TESTS_ENVIRONMENT"), "valgrind")) { return true; } - return TEST_SUCCESS; + return false; +} + +bool gdb_is_caller(void) +{ + if (bool(getenv("TESTS_ENVIRONMENT")) and strstr(getenv("TESTS_ENVIRONMENT"), "gdb")) + { + return true; + } + + return false; +} + +bool helgrind_is_caller(void) +{ + if (bool(getenv("TESTS_ENVIRONMENT")) and strstr(getenv("TESTS_ENVIRONMENT"), "helgrind")) + { + return true; + } + + return false; +} + +bool _in_valgrind(const char*, int, const char*) +{ + if (valgrind_is_caller()) + { + return true; + } + + return false; } } // namespace libtest diff --git a/libtest/comparison.hpp b/libtest/comparison.hpp index 98ea1c8b..4c809982 100644 --- a/libtest/comparison.hpp +++ b/libtest/comparison.hpp @@ -34,6 +34,13 @@ namespace libtest { +LIBTEST_API +bool gdb_is_caller(void); + +LIBTEST_API +bool valgrind_is_caller(void); + +LIBTEST_API bool _in_valgrind(const char *file, int line, const char *func); template diff --git a/libtest/core.cc b/libtest/core.cc index fac66616..e375e794 100644 --- a/libtest/core.cc +++ b/libtest/core.cc @@ -27,6 +27,9 @@ namespace libtest { void create_core(void) { +#ifdef TARGET_OS_OSX + return; +#endif if (getenv("LIBMEMCACHED_NO_COREDUMP") == NULL) { pid_t pid= fork(); diff --git a/libtest/fatal.hpp b/libtest/fatal.hpp index 23f47bd9..c1c2b683 100644 --- a/libtest/fatal.hpp +++ b/libtest/fatal.hpp @@ -55,5 +55,5 @@ private: } // namespace libtest -#define fatal_message(__mesg) libtest::fatal(LIBYATL_DEFAULT_PARAM, __mesg) -#define fatal_assert(__assert) if((__assert)) {} else { libtest::fatal(LIBYATL_DEFAULT_PARAM, #__assert); } +#define fatal_message(__mesg) throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "%s", __mesg) +#define fatal_assert(__assert) if((__assert)) {} else { throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "%s", #__assert); } diff --git a/libtest/framework.cc b/libtest/framework.cc index a9730a0e..96918664 100644 --- a/libtest/framework.cc +++ b/libtest/framework.cc @@ -120,7 +120,13 @@ test_return_t Framework::Item::startup(void* arg) libtest::Runner *Framework::runner() { - return _runner ? _runner : &defualt_runners; + if (_runner == NULL) + { + _runner= &defualt_runners; + } + _runner->set_servers(_servers); + + return _runner; } void* Framework::create(test_return_t& arg) diff --git a/libtest/framework.h b/libtest/framework.h index c5ca7a1b..c7341a72 100644 --- a/libtest/framework.h +++ b/libtest/framework.h @@ -179,4 +179,5 @@ private: libtest::server_startup_st _servers; bool _socket; void *_creators_ptr; + unsigned long int _servers_to_run; }; diff --git a/libtest/gearmand.cc b/libtest/gearmand.cc index 85307fcf..177de120 100644 --- a/libtest/gearmand.cc +++ b/libtest/gearmand.cc @@ -90,38 +90,11 @@ class Gearmand : public libtest::Server private: public: Gearmand(const std::string& host_arg, in_port_t port_arg) : - libtest::Server(host_arg, port_arg) + libtest::Server(host_arg, port_arg, GEARMAND_BINARY, true) { set_pid_file(); } - pid_t get_pid(bool error_is_ok) - { - if (pid_file().empty() == false) - { - Wait wait(pid_file(), 0); - - if (error_is_ok and not wait.successful()) - { - Error << "Pidfile was not found:" << pid_file(); - return -1; - } - } - - GetPid *get_instance_pid; - util::Instance instance(hostname(), port()); - instance.set_finish(get_instance_pid= new GetPid); - - instance.push(new util::Operation(test_literal_param("getpid\r\n"), true)); - - if (error_is_ok and instance.run() == false) - { - Error << "Failed to obtain pid of server"; - } - - return get_instance_pid->pid(); - } - bool ping() { gearman_client_st *client= gearman_client_create(NULL); @@ -160,16 +133,6 @@ public: return "gearmand"; }; - const char *executable() - { - return GEARMAND_BINARY; - } - - const char *daemon_file_option() - { - return "--daemon"; - } - void log_file_option(Application& app, const std::string& arg) { if (arg.empty() == false) diff --git a/libtest/memcached.cc b/libtest/memcached.cc index ce523a7a..ffb21c9d 100644 --- a/libtest/memcached.cc +++ b/libtest/memcached.cc @@ -50,6 +50,18 @@ using namespace libtest; using namespace libtest; +namespace { + bool is_memcached_libtool() + { + if (MEMCACHED_BINARY and strcmp(MEMCACHED_BINARY, "memcached/memcached") == 0) + { + return true; + } + + return false; + } +} + class Memcached : public libtest::Server { std::string _username; @@ -61,13 +73,15 @@ public: const bool is_socket_arg, const std::string& username_arg, const std::string& password_arg) : - libtest::Server(host_arg, port_arg, is_socket_arg), + libtest::Server(host_arg, port_arg, + MEMCACHED_BINARY, is_memcached_libtool(), is_socket_arg), _username(username_arg), _password(password_arg) { } Memcached(const std::string& host_arg, const in_port_t port_arg, const bool is_socket_arg) : - libtest::Server(host_arg, port_arg, is_socket_arg) + libtest::Server(host_arg, port_arg, + MEMCACHED_BINARY, is_memcached_libtool(), is_socket_arg) { set_pid_file(); } @@ -87,54 +101,26 @@ public: return _username; } - pid_t get_pid(bool error_is_ok) + bool wait_for_pidfile() const { - // Memcached is slow to start, so we need to do this - if (pid_file().empty() == false) - { - if (error_is_ok and - wait_for_pidfile() == false) - { - Error << "Pidfile was not found:" << pid_file(); - return -1; - } - } - - pid_t local_pid; - memcached_return_t rc= MEMCACHED_SUCCESS; - if (has_socket()) - { - if (socket().empty()) - { - return -1; - } + Wait wait(pid(), 4); - local_pid= libmemcached_util_getpid(socket().c_str(), port(), &rc); - } - else - { - local_pid= libmemcached_util_getpid(hostname().c_str(), port(), &rc); - } - - if (error_is_ok and ((memcached_failed(rc) or not is_pid_valid(local_pid)))) - { - Error << "libmemcached_util_getpid(" << memcached_strerror(NULL, rc) << ") pid: " << local_pid << " for:" << *this; - } - - return local_pid; + return wait.successful(); } bool ping() { +#if 0 // Memcached is slow to start, so we need to do this if (pid_file().empty() == false) { if (wait_for_pidfile() == false) { - Error << "Pidfile was not found:" << pid_file(); + Error << "Pidfile was not found:" << pid_file() << " :" << running(); return -1; } } +#endif memcached_return_t rc; bool ret; @@ -168,12 +154,7 @@ public: bool is_libtool() { - if (MEMCACHED_BINARY and strcmp(MEMCACHED_BINARY, "memcached/memcached") == 0) - { - return true; - } - - return false; + return is_memcached_libtool(); } virtual void pid_file_option(Application& app, const std::string& arg) @@ -189,11 +170,6 @@ public: return "-s "; } - const char *daemon_file_option() - { - return "-d"; - } - virtual void port_option(Application& app, in_port_t arg) { char buffer[30]; @@ -237,43 +213,12 @@ class MemcachedLight : public libtest::Server { public: - MemcachedLight(const std::string& host_arg, const in_port_t port_arg): - libtest::Server(host_arg, port_arg) + MemcachedLight(const std::string& host_arg, const in_port_t port_arg) : + libtest::Server(host_arg, port_arg, MEMCACHED_LIGHT_BINARY, true) { set_pid_file(); } - pid_t get_pid(bool error_is_ok) - { - // Memcached is slow to start, so we need to do this - if (pid_file().empty() == false) - { - if (error_is_ok and wait_for_pidfile() == false) - { - Error << "Pidfile was not found:" << pid_file(); - return -1; - } - } - - bool success= false; - std::stringstream error_message; - pid_t local_pid= get_pid_from_file(pid_file(), error_message); - if (local_pid > 0) - { - if (::kill(local_pid, 0) > 0) - { - success= true; - } - } - - if (error_is_ok and ((success or not is_pid_valid(local_pid)))) - { - Error << "kill(" << " pid: " << local_pid << " errno:" << strerror(errno) << " for:" << *this; - } - - return local_pid; - } - bool ping() { // Memcached is slow to start, so we need to do this @@ -309,11 +254,6 @@ public: return MEMCACHED_LIGHT_BINARY; } - const char *daemon_file_option() - { - return "--daemon"; - } - virtual void port_option(Application& app, in_port_t arg) { char buffer[1024]; @@ -376,44 +316,12 @@ public: return MEMCACHED_SASL_BINARY; } - pid_t get_pid(bool error_is_ok) - { - // Memcached is slow to start, so we need to do this - if (pid_file().empty() == false) - { - if (error_is_ok and - wait_for_pidfile() == false) - { - Error << "Pidfile was not found:" << pid_file(); - return -1; - } - } - - pid_t local_pid; - memcached_return_t rc; - if (has_socket()) - { - local_pid= libmemcached_util_getpid2(socket().c_str(), 0, username().c_str(), password().c_str(), &rc); - } - else - { - local_pid= libmemcached_util_getpid2(hostname().c_str(), port(), username().c_str(), password().c_str(), &rc); - } - - if (error_is_ok and ((memcached_failed(rc) or not is_pid_valid(local_pid)))) - { - Error << "libmemcached_util_getpid2(" << memcached_strerror(NULL, rc) << ") username: " << username() << " password: " << password() << " pid: " << local_pid << " for:" << *this; - } - - return local_pid; - } - bool ping() { // Memcached is slow to start, so we need to do this - if (not pid_file().empty()) + if (pid_file().empty() == false) { - if (not wait_for_pidfile()) + if (wait_for_pidfile() == false) { Error << "Pidfile was not found:" << pid_file(); return -1; @@ -432,7 +340,7 @@ public: ret= libmemcached_util_ping2(hostname().c_str(), port(), username().c_str(), password().c_str(), &rc); } - if (memcached_failed(rc) or not ret) + if (memcached_failed(rc) or ret == false) { Error << "libmemcached_util_ping2(" << hostname() << ", " << port() << ", " << username() << ", " << password() << ") error: " << memcached_strerror(NULL, rc); } diff --git a/libtest/port.cc b/libtest/port.cc index 2561343d..fefb6a6d 100644 --- a/libtest/port.cc +++ b/libtest/port.cc @@ -117,7 +117,7 @@ in_port_t get_free_port() // We handle the case where if we max out retries, we still abort. if (ret_port <= 1024) { - throw fatal_message("No port could be found"); + fatal_message("No port could be found"); } return ret_port; diff --git a/libtest/run.gdb b/libtest/run.gdb index 86b5fe07..c38beb27 100644 --- a/libtest/run.gdb +++ b/libtest/run.gdb @@ -3,4 +3,3 @@ set logging overwrite on set environment LIBTEST_IN_GDB=1 run thread apply all bt -quit diff --git a/libtest/runner.h b/libtest/runner.h index 217e2697..ea42c260 100644 --- a/libtest/runner.h +++ b/libtest/runner.h @@ -37,7 +37,20 @@ public: Runner(); + void set_servers(libtest::server_startup_st& arg) + { + _servers= &arg; + } + + bool check() + { + return _servers ? _servers->check() : true; + } + virtual ~Runner() { } + +private: + libtest::server_startup_st* _servers; }; } // namespace Runner diff --git a/libtest/server.cc b/libtest/server.cc index 7591e8bf..3141eed9 100644 --- a/libtest/server.cc +++ b/libtest/server.cc @@ -76,21 +76,26 @@ std::ostream& operator<<(std::ostream& output, const Server &arg) #define MAGIC_MEMORY 123570 -Server::Server(const std::string& host_arg, const in_port_t port_arg, bool is_socket_arg) : +Server::Server(const std::string& host_arg, const in_port_t port_arg, + const std::string& executable, const bool _is_libtool, + bool is_socket_arg) : _magic(MAGIC_MEMORY), _is_socket(is_socket_arg), - _pid(-1), _port(port_arg), - _hostname(host_arg) + _hostname(host_arg), + _app(executable, _is_libtool) { } Server::~Server() { - if (has_pid() and not kill(_pid)) - { - Error << "Unable to kill:" << *this; - } +} + +bool Server::check() +{ + _app.slurp(); + _app.check(); + return true; } bool Server::validate() @@ -104,13 +109,12 @@ bool Server::cycle() uint32_t limit= 3; // Try to ping, and kill the server #limit number of times - pid_t current_pid; while (--limit and - is_pid_valid(current_pid= get_pid())) + is_pid_valid(_app.pid())) { - if (kill(current_pid)) + if (kill()) { - Log << "Killed existing server," << *this << " with pid:" << current_pid; + Log << "Killed existing server," << *this; dream(0, 50000); continue; } @@ -119,7 +123,7 @@ bool Server::cycle() // For whatever reason we could not kill it, and we reached limit if (limit == 0) { - Error << "Reached limit, could not kill server pid:" << current_pid; + Error << "Reached limit, could not kill server"; return false; } @@ -133,55 +137,47 @@ bool Server::wait_for_pidfile() const return wait.successful(); } +bool Server::has_pid() const +{ + return (_app.pid() > 1); +} + + bool Server::start() { // If we find that we already have a pid then kill it. - if (has_pid() and kill(_pid) == false) - { - Error << "Could not kill() existing server during start() pid:" << _pid; - return false; - } - - if (has_pid() == false) + if (has_pid() == true) { fatal_message("has_pid() failed, programer error"); } - Application app(executable(), is_libtool()); - - if (is_debug()) + // This needs more work. +#if 0 + if (gdb_is_caller()) { - app.use_gdb(); + _app.use_gdb(); } - else if (getenv("TESTS_ENVIRONMENT")) +#endif + + if (getenv("YATL_VALGRIND_SERVER")) { - if (strstr(getenv("TESTS_ENVIRONMENT"), "gdb")) - { - app.use_gdb(); - } + _app.use_valgrind(); } - - if (args(app) == false) + else if (args(_app) == false) { Error << "Could not build command()"; return false; } Application::error_t ret; - if (Application::SUCCESS != (ret= app.run())) + if (Application::SUCCESS != (ret= _app.run())) { Error << "Application::run() " << ret; return false; } - _running= app.print(); - - if (Application::SUCCESS != (ret= app.wait())) - { - Error << "Application::wait() " << _running << " " << ret; - return false; - } + _running= _app.print(); - if (is_valgrind()) + if (valgrind_is_caller()) { dream(5, 50000); } @@ -192,17 +188,17 @@ bool Server::start() if (wait.successful() == false) { - libtest::fatal(LIBYATL_DEFAULT_PARAM, - "Unable to open pidfile for: %s", - _running.c_str()); + throw libtest::fatal(LIBYATL_DEFAULT_PARAM, + "Unable to open pidfile for: %s", + _running.c_str()); } } + uint32_t this_wait; bool pinged= false; { uint32_t timeout= 20; // This number should be high enough for valgrind startup (which is slow) uint32_t waited; - uint32_t this_wait; uint32_t retry; for (waited= 0, retry= 1; ; retry++, waited+= this_wait) @@ -228,9 +224,11 @@ bool Server::start() { if (kill_file(pid_file()) == false) { - fatal_message("Failed to kill off server after startup occurred, when pinging failed"); + throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "Failed to kill off server after startup occurred, when pinging failed: %s", pid_file().c_str()); } - Error << "Failed to ping() server started, having pid_file. exec:" << _running; + Error << "Failed to ping(), waited:" << this_wait + << " server started, having pid_file. exec:" << _running + << " error:" << _app.stderr_result(); } else { @@ -240,9 +238,6 @@ bool Server::start() return false; } - // A failing get_pid() at this point is considered an error - _pid= get_pid(true); - return has_pid(); } @@ -250,12 +245,11 @@ void Server::reset_pid() { _running.clear(); _pid_file.clear(); - _pid= -1; } -pid_t Server::pid() +pid_t Server::pid() const { - return _pid; + return _app.pid(); } void Server::add_option(const std::string& arg) @@ -333,7 +327,7 @@ bool Server::set_log_file() int fd; if ((fd= mkstemp(file_buffer)) == -1) { - libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", file_buffer, strerror(errno)); + throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", file_buffer, strerror(errno)); } close(fd); @@ -346,7 +340,7 @@ bool Server::args(Application& app) { // Set a log file if it was requested (and we can) - if (has_log_file_option()) + if (false and has_log_file_option()) { set_log_file(); log_file_option(app, _log_file); @@ -367,12 +361,6 @@ bool Server::args(Application& app) pid_file_option(app, pid_file()); } - assert(daemon_file_option()); - if (daemon_file_option() and not is_valgrind() and not is_helgrind()) - { - app.add_option(daemon_file_option()); - } - if (has_socket_file_option()) { if (set_socket_file() == false) @@ -403,25 +391,11 @@ bool Server::args(Application& app) return true; } -bool Server::is_debug() const -{ - return bool(getenv("LIBTEST_MANUAL_GDB")); -} - -bool Server::is_valgrind() const -{ - return bool(getenv("LIBTEST_MANUAL_VALGRIND")); -} - -bool Server::is_helgrind() const -{ - return bool(getenv("LIBTEST_MANUAL_HELGRIND")); -} - -bool Server::kill(pid_t pid_arg) +bool Server::kill() { - if (check_pid(pid_arg) and kill_pid(pid_arg)) // If we kill it, reset + if (check_pid(_app.pid())) // If we kill it, reset { + _app.murder(); if (broken_pid_file() and pid_file().empty() == false) { unlink(pid_file().c_str()); diff --git a/libtest/server.h b/libtest/server.h index 1b6841d5..b1ca30aa 100644 --- a/libtest/server.h +++ b/libtest/server.h @@ -47,7 +47,6 @@ private: std::string _log_file; std::string _base_command; // executable command which include libtool, valgrind, gdb, etc std::string _running; // Current string being used for system() - pid_t _pid; protected: in_port_t _port; @@ -55,13 +54,13 @@ protected: std::string _extra_args; public: - Server(const std::string& hostname, const in_port_t port_arg, const bool is_socket_arg= false); + Server(const std::string& hostname, const in_port_t port_arg, + const std::string& executable, const bool _is_libtool, + const bool is_socket_arg= false); virtual ~Server(); virtual const char *name()= 0; - virtual const char *executable()= 0; - virtual const char *daemon_file_option()= 0; virtual bool is_libtool()= 0; virtual bool has_socket_file_option() const @@ -163,8 +162,6 @@ public: virtual bool ping()= 0; - virtual pid_t get_pid(bool error_is_ok= false)= 0; - virtual bool build(size_t argc, const char *argv[])= 0; void add_option(const std::string&); @@ -188,26 +185,17 @@ public: // Reset a server if another process has killed the server void reset() { - _pid= -1; _pid_file.clear(); _log_file.clear(); } bool args(Application&); - pid_t pid(); + pid_t pid() const; - pid_t pid() const - { - return _pid; - } + bool has_pid() const; - bool has_pid() const - { - return (_pid > 1); - } - - bool wait_for_pidfile() const; + virtual bool wait_for_pidfile() const; bool check_pid(pid_t pid_arg) const { @@ -224,9 +212,11 @@ public: return _running; } + bool check(); + std::string log_and_pid(); - bool kill(pid_t pid_arg); + bool kill(); bool start(); bool command(libtest::Application& app); @@ -235,6 +225,7 @@ public: protected: bool set_pid_file(); Options _options; + Application _app; private: bool is_helgrind() const; diff --git a/libtest/server_container.cc b/libtest/server_container.cc index 579f901c..8203de9d 100644 --- a/libtest/server_container.cc +++ b/libtest/server_container.cc @@ -82,7 +82,7 @@ bool server_startup_st::shutdown(uint32_t number_of_host) { Server* tmp= servers[number_of_host]; - if (tmp and tmp->has_pid() and not tmp->kill(tmp->pid())) + if (tmp and tmp->has_pid() and tmp->kill() == false) { } else { @@ -102,15 +102,33 @@ void server_startup_st::shutdown_and_remove() servers.clear(); } -void server_startup_st::shutdown() +bool server_startup_st::check() const { + bool success= true; + for (std::vector::const_iterator iter= servers.begin(); iter != servers.end(); iter++) + { + if ((*iter)->check() == false) + { + success= false; + } + } + + return success; +} + +bool server_startup_st::shutdown() +{ + bool success= true; for (std::vector::iterator iter= servers.begin(); iter != servers.end(); iter++) { - if ((*iter)->has_pid() and not (*iter)->kill((*iter)->pid())) + if ((*iter)->has_pid() and (*iter)->kill() == false) { Error << "Unable to kill:" << *(*iter); + success= false; } } + + return success; } void server_startup_st::restart() @@ -126,8 +144,9 @@ server_startup_st::server_startup_st() : _magic(MAGIC_MEMORY), _socket(false), _sasl(false), - _count(5), - udp(0) + _count(0), + udp(0), + _servers_to_run(5) { } server_startup_st::~server_startup_st() @@ -140,29 +159,11 @@ bool server_startup_st::validate() return _magic == MAGIC_MEMORY; } - -bool server_startup_st::is_debug() const +bool server_startup(server_startup_st& construct, const std::string& server_type, in_port_t try_port, int argc, const char *argv[], const bool opt_startup_message) { - return bool(getenv("LIBTEST_MANUAL_GDB")); -} - -bool server_startup_st::is_valgrind() const -{ - return bool(getenv("LIBTEST_MANUAL_VALGRIND")); -} - -bool server_startup_st::is_helgrind() const -{ - return bool(getenv("LIBTEST_MANUAL_HELGRIND")); -} - - -bool server_startup(server_startup_st& construct, const std::string& server_type, in_port_t try_port, int argc, const char *argv[]) -{ - Outn(); if (try_port <= 0) { - libtest::fatal(LIBYATL_DEFAULT_PARAM, "was passed the invalid port number %d", int(try_port)); + throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "was passed the invalid port number %d", int(try_port)); } libtest::Server *server= NULL; @@ -239,7 +240,7 @@ bool server_startup(server_startup_st& construct, const std::string& server_type server->build(argc, argv); - if (construct.is_debug()) + if (gdb_is_caller() and false) { Out << "Pausing for startup, hit return when ready."; std::string gdb_command= server->base_command(); @@ -256,13 +257,16 @@ bool server_startup(server_startup_st& construct, const std::string& server_type } else { - Out << "STARTING SERVER(pid:" << server->pid() << "): " << server->running(); + if (opt_startup_message) + { + Outn(); + Out << "STARTING SERVER(pid:" << server->pid() << "): " << server->running(); + Outn(); + } } construct.push_server(server); - Outn(); - return true; } @@ -337,7 +341,7 @@ bool server_startup_st::start_socket_server(const std::string& server_type, cons server->build(argc, argv); - if (is_debug()) + if (gdb_is_caller() and false) { Out << "Pausing for startup, hit return when ready."; std::string gdb_command= server->base_command(); @@ -347,7 +351,7 @@ bool server_startup_st::start_socket_server(const std::string& server_type, cons #endif getchar(); } - else if (not server->start()) + else if (server->start() == false) { Error << "Failed to start " << *server; delete server; diff --git a/libtest/server_container.h b/libtest/server_container.h index 29ecb97d..c65065aa 100644 --- a/libtest/server_container.h +++ b/libtest/server_container.h @@ -57,12 +57,7 @@ public: uint32_t count() const { - return _count; - } - - void set_count(uint32_t arg) - { - _count= arg; + return servers.size(); } void restart(); @@ -79,11 +74,6 @@ public: return _username; } - - bool is_debug() const; - bool is_helgrind() const; - bool is_valgrind() const; - bool socket() { return _socket; @@ -108,13 +98,28 @@ public: void shutdown_and_remove(); - void shutdown(); + bool shutdown(); bool shutdown(uint32_t number_of_host); + bool check() const; + void push_server(Server *); Server *pop_server(); + + unsigned long int servers_to_run() const + { + return _servers_to_run; + } + + void set_servers_to_run(unsigned long int arg) + { + _servers_to_run= arg; + } + +private: + unsigned long int _servers_to_run; }; -bool server_startup(server_startup_st&, const std::string&, in_port_t try_port, int argc, const char *argv[]); +bool server_startup(server_startup_st&, const std::string&, in_port_t try_port, int argc, const char *argv[], const bool opt_startup_message= true); } // namespace libtest diff --git a/libtest/signal.cc b/libtest/signal.cc index bc9da4bc..04d06b36 100644 --- a/libtest/signal.cc +++ b/libtest/signal.cc @@ -75,7 +75,7 @@ void SignalThread::post() void SignalThread::test() { assert(magic_memory == MAGIC_MEMORY); - if (not getenv("LIBTEST_IN_GDB")) + if (bool(getenv("LIBTEST_IN_GDB")) == false) { assert(sigismember(&set, SIGABRT)); assert(sigismember(&set, SIGQUIT)); @@ -86,7 +86,7 @@ void SignalThread::test() SignalThread::~SignalThread() { - if (not is_shutdown()) + if (is_shutdown() == false) { set_shutdown(SHUTDOWN_GRACEFUL); } @@ -143,6 +143,10 @@ static void *sig_thread(void *arg) } break; + case 0: + Error << "Inside of gdb"; + break; + default: Error << "Signal handling thread got unexpected signal " << strsignal(sig); break; @@ -160,7 +164,7 @@ SignalThread::SignalThread() : { pthread_mutex_init(&shutdown_mutex, NULL); sigemptyset(&set); - if (not getenv("LIBTEST_IN_GDB")) + if (bool(getenv("LIBTEST_IN_GDB")) == false) { sigaddset(&set, SIGABRT); sigaddset(&set, SIGQUIT); diff --git a/libtest/strerror.cc b/libtest/strerror.cc index 0739d625..e37b88ae 100644 --- a/libtest/strerror.cc +++ b/libtest/strerror.cc @@ -37,7 +37,7 @@ const char *test_strerror(test_return_t code) return "skipped"; } - throw fatal_message("No port could be found"); + fatal_message("No port could be found"); } } // namespace libtest diff --git a/libtest/test.cc b/libtest/test.cc index cafc48d4..11222b2c 100644 --- a/libtest/test.cc +++ b/libtest/test.cc @@ -76,7 +76,9 @@ static long int timedif(struct timeval a, struct timeval b) int main(int argc, char *argv[]) { - bool opt_repeat= false; + bool opt_massive= false; + unsigned long int opt_repeat= 1; // Run all tests once + bool opt_quiet= false; std::string collection_to_run; // Options parsing @@ -84,14 +86,19 @@ int main(int argc, char *argv[]) enum long_option_t { OPT_LIBYATL_VERSION, OPT_LIBYATL_MATCH_COLLECTION, + OPT_LIBYATL_MASSIVE, + OPT_LIBYATL_QUIET, OPT_LIBYATL_REPEAT }; static struct option long_options[]= { - {"repeat", no_argument, NULL, OPT_LIBYATL_REPEAT}, - {"collection", required_argument, NULL, OPT_LIBYATL_MATCH_COLLECTION}, - {0, 0, 0, 0} + { "version", no_argument, NULL, OPT_LIBYATL_VERSION }, + { "quiet", no_argument, NULL, OPT_LIBYATL_QUIET }, + { "repeat", no_argument, NULL, OPT_LIBYATL_REPEAT }, + { "collection", required_argument, NULL, OPT_LIBYATL_MATCH_COLLECTION }, + { "massive", no_argument, NULL, OPT_LIBYATL_MASSIVE }, + { 0, 0, 0, 0 } }; int option_index= 0; @@ -108,14 +115,22 @@ int main(int argc, char *argv[]) case OPT_LIBYATL_VERSION: break; + case OPT_LIBYATL_QUIET: + opt_quiet= true; + break; + case OPT_LIBYATL_REPEAT: - opt_repeat= true; + opt_repeat= strtoul(optarg, (char **) NULL, 10); break; case OPT_LIBYATL_MATCH_COLLECTION: collection_to_run= optarg; break; + case OPT_LIBYATL_MASSIVE: + opt_massive= true; + break; + case '?': /* getopt_long already printed an error message. */ Error << "unknown option to getopt_long()"; @@ -129,11 +144,26 @@ int main(int argc, char *argv[]) srandom((unsigned int)time(NULL)); - if (getenv("LIBTEST_QUIET") and strcmp(getenv("LIBTEST_QUIET"), "0") == 0) + if (bool(getenv("YATL_REPEAT")) and (strtoul(getenv("YATL_REPEAT"), (char **) NULL, 10) > 1)) { - close(STDOUT_FILENO); + opt_repeat= strtoul(getenv("YATL_REPEAT"), (char **) NULL, 10); + } + + if ((bool(getenv("YATL_QUIET")) and (strcmp(getenv("YATL_QUIET"), "0") == 0)) or opt_quiet) + { + opt_quiet= true; } else if (getenv("JENKINS_URL")) + { + if (bool(getenv("YATL_QUIET")) and (strcmp(getenv("YATL_QUIET"), "1") == 0)) + { } + else + { + opt_quiet= true; + } + } + + if (opt_quiet) { close(STDOUT_FILENO); } @@ -173,7 +203,7 @@ int main(int argc, char *argv[]) fatal_assert(sigignore(SIGPIPE) == 0); libtest::SignalThread signal; - if (not signal.setup()) + if (signal.setup() == false) { Error << "Failed to setup signals"; return EXIT_FAILURE; @@ -254,7 +284,7 @@ int main(int argc, char *argv[]) goto cleanup; default: - throw fatal_message("invalid return code"); + fatal_message("invalid return code"); } Out << "Collection: " << next->name; @@ -326,6 +356,11 @@ int main(int argc, char *argv[]) } } + catch (libtest::fatal &e) + { + Error << "Fatal exception was thrown: " << e.what(); + return_code= TEST_FAILURE; + } catch (std::exception &e) { Error << "Exception was thrown: " << e.what(); @@ -359,7 +394,7 @@ int main(int argc, char *argv[]) break; default: - throw fatal_message("invalid return code"); + fatal_message("invalid return code"); } if (test_failed(world.on_error(return_code, creators_ptr))) @@ -420,7 +455,7 @@ cleanup: stats_print(&stats); Outn(); // Generate a blank to break up the messages if make check/test has been run - } while (exit_code == EXIT_SUCCESS and opt_repeat); + } while (exit_code == EXIT_SUCCESS and --opt_repeat); } catch (libtest::fatal& e) { diff --git a/libtest/tmpfile.cc b/libtest/tmpfile.cc index 1bbacda3..b7cb5f5e 100644 --- a/libtest/tmpfile.cc +++ b/libtest/tmpfile.cc @@ -35,7 +35,7 @@ std::string create_tmpfile(const std::string& name) int fd; if ((fd= mkstemp(file_buffer)) == -1) { - libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", file_buffer, strerror(errno)); + throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", file_buffer, strerror(errno)); } close(fd); unlink(file_buffer); diff --git a/libtest/unittest.cc b/libtest/unittest.cc index a5860bdd..87f69acb 100644 --- a/libtest/unittest.cc +++ b/libtest/unittest.cc @@ -381,17 +381,16 @@ static test_return_t application_true_fubar_BINARY(void *) static test_return_t application_doesnotexist_BINARY(void *) { - test_skip_valgrind(); + test_skip_valgrind(); Application true_app("doesnotexist"); const char *args[]= { "--fubar", 0 }; #if defined(TARGET_OS_OSX) && TARGET_OS_OSX test_compare(Application::INVALID, true_app.run(args)); - test_compare(Application::FAILURE, true_app.wait()); #else test_compare(Application::SUCCESS, true_app.run(args)); - test_compare(Application::INVALID, true_app.wait()); + test_compare(Application::INVALID, true_app.wait(false)); #endif test_compare(0, true_app.stdout_result().size()); @@ -472,6 +471,8 @@ static test_return_t application_echo_fubar_BINARY(void *) test_compare(Application::SUCCESS, true_app.run(args)); test_compare(Application::SUCCESS, true_app.wait()); + while (true_app.slurp() == false) {} ; + libtest::vchar_t response; make_vector(response, test_literal_param("fubar\n")); test_compare(response, true_app.stdout_result()); @@ -486,7 +487,8 @@ static test_return_t application_echo_fubar_BINARY2(void *) true_app.add_option("fubar"); test_compare(Application::SUCCESS, true_app.run()); - test_compare(Application::SUCCESS, true_app.wait()); + test_compare(Application::SUCCESS, true_app.wait(false)); + libtest::vchar_t response; make_vector(response, test_literal_param("fubar\n")); test_compare(response, true_app.stdout_result()); @@ -616,6 +618,7 @@ static test_return_t gdb_abort_services_appliction_TEST(void *) test_compare(Application::SUCCESS, abort_app.wait()); std::string gdb_filename= abort_app.gdb_filename(); + test_skip(0, access(gdb_filename.c_str(), R_OK )); const char *args[]= { "SIGABRT", gdb_filename.c_str(), 0 }; test_compare(EXIT_SUCCESS, exec_cmdline("grep", args)); @@ -656,11 +659,13 @@ static test_return_t number_of_cpus_TEST(void *) static test_return_t create_tmpfile_TEST(void *) { std::string tmp= create_tmpfile(__func__); + test_compare(-1, access(tmp.c_str(), R_OK)); + test_compare(-1, access(tmp.c_str(), F_OK)); Application touch_app("touch"); const char *args[]= { tmp.c_str(), 0 }; test_compare(Application::SUCCESS, touch_app.run(args)); - test_compare(Application::SUCCESS, touch_app.wait()); + test_compare(Application::SUCCESS, touch_app.wait(false)); test_compare_hint(0, access(tmp.c_str(), R_OK), strerror(errno)); test_compare_hint(0, unlink(tmp.c_str()), strerror(errno)); @@ -671,7 +676,7 @@ static test_return_t create_tmpfile_TEST(void *) static test_return_t fatal_message_TEST(void *) { test_compare(fatal_calls++, fatal::disabled_counter()); - throw fatal_message("Fatal test"); + fatal_message("Fatal test"); return TEST_SUCCESS; } @@ -852,6 +857,7 @@ collection_st collection[] ={ {"cmdline", 0, 0, cmdline_tests}, {"application", 0, 0, application_tests}, {"http", check_for_curl, 0, http_tests}, + {"http", check_for_curl, 0, http_tests}, {"get_free_port()", 0, 0, get_free_port_TESTS }, {"fatal", disable_fatal_exception, enable_fatal_exception, fatal_message_TESTS }, {"number_of_cpus()", 0, 0, number_of_cpus_TESTS }, diff --git a/libtest/wait.h b/libtest/wait.h index c6c3f966..f81a29ad 100644 --- a/libtest/wait.h +++ b/libtest/wait.h @@ -24,6 +24,7 @@ #include #include +#include #include @@ -63,6 +64,30 @@ public: } } + Wait(const pid_t &_pid_arg, uint32_t timeout= 6) : + _successful(false) + { + uint32_t waited; + uint32_t this_wait; + uint32_t retry; + + for (waited= 0, retry= 1; ; retry++, waited+= this_wait) + { + if (kill(_pid_arg, 0) == 0) + { + _successful= true; + break; + } + else if (waited >= timeout) + { + break; + } + + this_wait= retry * retry / 3 + 1; + libtest::dream(this_wait, 0); + } + } + bool successful() const { return _successful; diff --git a/m4/pandora_optimize.m4 b/m4/pandora_optimize.m4 index 05154ed4..dcee0648 100644 --- a/m4/pandora_optimize.m4 +++ b/m4/pandora_optimize.m4 @@ -18,7 +18,7 @@ AC_DEFUN([PANDORA_OPTIMIZE],[ ;; esac - AM_CPPFLAGS="-g ${AM_CPPFLAGS}" + AM_CPPFLAGS="-ggdb ${AM_CPPFLAGS}" DEBUG_CFLAGS="-O0" DEBUG_CXXFLAGS="-O0" diff --git a/memcached/memcached.c b/memcached/memcached.c index 7d053cce..10e89f80 100644 --- a/memcached/memcached.c +++ b/memcached/memcached.c @@ -5278,8 +5278,10 @@ int main (int argc, char **argv) { stop_assoc_maintenance_thread(); /* remove the PID file if we're a daemon */ +#if 0 if (do_daemonize) remove_pidfile(pid_file); +#endif /* Clean up strdup() call for bind() address */ if (settings.inter) free(settings.inter); diff --git a/tests/cycle.cc b/tests/cycle.cc index a762d00b..ac087f4f 100644 --- a/tests/cycle.cc +++ b/tests/cycle.cc @@ -1,6 +1,6 @@ /* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: * - * Libmemcached library + * Cycle the Gearmand server * * Copyright (C) 2011 Data Differential, http://datadifferential.com/ * @@ -42,110 +42,88 @@ #include #include +using namespace libtest; #include -#include -#include - -#include - -#include +static test_return_t server_startup_single_TEST(void *obj) +{ + server_startup_st *servers= (server_startup_st*)obj; + test_compare(true, server_startup(*servers, "memcached", libtest::get_free_port(), 0, NULL, false)); + test_compare(true, servers->shutdown()); -using namespace libtest; -#ifndef __INTEL_COMPILER -#pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif + return TEST_SUCCESS; +} -static test_return_t alive(memcached_st *memc) +static test_return_t server_startup_multiple_TEST(void *obj) { - test_true(memc); - test_true(memcached_is_allocated(memc)); - for (uint32_t x= 0; x < memcached_server_count(memc); ++x) + server_startup_st *servers= (server_startup_st*)obj; + for (size_t x= 0; x < 10; x++) { - memcached_server_instance_st instance= memcached_server_instance_by_position(memc, x); - test_true(instance); - - test_true(libmemcached_util_ping(memcached_server_name(instance), - memcached_server_port(instance), NULL)); + test_compare(true, server_startup(*servers, "memcached", libtest::get_free_port(), 0, NULL, false)); } + test_compare(true, servers->shutdown()); return TEST_SUCCESS; } -static test_return_t valid(memcached_st *memc) +static test_return_t shutdown_and_remove_TEST(void *obj) { - test_true(memc); - test_true(memcached_is_allocated(memc)); + server_startup_st *servers= (server_startup_st*)obj; + servers->shutdown_and_remove(); - for (uint32_t x= 0; x < memcached_server_count(memc); ++x) - { - memcached_server_instance_st instance= memcached_server_instance_by_position(memc, x); - test_true(instance); + return TEST_SUCCESS; +} - pid_t pid= libmemcached_util_getpid(memcached_server_name(instance), - memcached_server_port(instance), NULL); - test_true(pid != -1); - } +test_st server_startup_TESTS[] ={ + {"server_startup(1)", false, (test_callback_fn*)server_startup_single_TEST }, + {"server_startup(10)", false, (test_callback_fn*)server_startup_multiple_TEST }, + {"shutdown_and_remove()", false, (test_callback_fn*)shutdown_and_remove_TEST }, + {"server_startup(10)", false, (test_callback_fn*)server_startup_multiple_TEST }, + {0, 0, 0} +}; + +#if 0 +static test_return_t collection_INIT(void *object) +{ + server_startup_st *servers= (server_startup_st*)object; + test_zero(servers->count()); + test_compare(true, server_startup(*servers, "memcached", libtest::default_port(), 0, NULL)); return TEST_SUCCESS; } +#endif -static test_return_t kill_test(memcached_st *) +static test_return_t validate_sanity_INIT(void *object) { - static struct timespec global_sleep_value= { 2, 0 }; + server_startup_st *servers= (server_startup_st*)object; -#ifdef WIN32 - sleep(1); -#else - nanosleep(&global_sleep_value, NULL); -#endif + test_zero(servers->count()); return TEST_SUCCESS; } -test_st ping_tests[] ={ - {"alive", true, (test_callback_fn*)alive }, - {0, 0, 0} -}; - -test_st getpid_tests[] ={ - {"valid", true, (test_callback_fn*)valid }, - {0, 0, 0} -}; +static test_return_t collection_FINAL(void *object) +{ + server_startup_st *servers= (server_startup_st*)object; + servers->shutdown_and_remove(); -test_st kill_tests[] ={ - {"kill", true, (test_callback_fn*)kill_test }, - {0, 0, 0} -}; + return TEST_SUCCESS; +} collection_st collection[] ={ - {"libmemcached_util_ping()", 0, 0, ping_tests}, - {"libmemcached_util_getpid()", 0, 0, getpid_tests}, - {"kill", 0, 0, kill_tests}, + {"server_startup()", validate_sanity_INIT, collection_FINAL, server_startup_TESTS }, {0, 0, 0, 0} }; - -#include "tests/libmemcached_world.h" +static void *world_create(server_startup_st& servers, test_return_t& ) +{ + return &servers; +} void get_world(Framework *world) { world->collections= collection; - - world->_create= (test_callback_create_fn*)world_create; - world->_destroy= (test_callback_destroy_fn*)world_destroy; - - world->item.set_startup((test_callback_fn*)world_test_startup); - world->item.set_pre((test_callback_fn*)world_pre_run); - world->item.set_post((test_callback_fn*)world_post_run); - - world->set_on_error((test_callback_error_fn*)world_on_error); - - world->collection_startup= (test_callback_fn*)world_container_startup; - world->collection_shutdown= (test_callback_fn*)world_container_shutdown; - - world->set_runner(&defualt_libmemcached_runner); - world->set_socket(); + world->_create= world_create; } diff --git a/tests/failure.cc b/tests/failure.cc index 699ef46c..ccc32f39 100644 --- a/tests/failure.cc +++ b/tests/failure.cc @@ -63,6 +63,8 @@ Framework *global_framework= NULL; static test_return_t shutdown_servers(memcached_st *memc) { + test_skip_valgrind(); + test_compare(memcached_server_count(memc), 1U); // Disable a single server, just the first @@ -73,6 +75,8 @@ static test_return_t shutdown_servers(memcached_st *memc) static test_return_t add_shutdown_servers(memcached_st *memc) { + test_skip_valgrind(); + while (memcached_server_count(memc) < 2) { const char *argv[1]= { "add_shutdown_server" }; @@ -207,7 +211,7 @@ collection_st collection[] ={ void get_world(Framework *world) { - world->servers().set_count(1); + world->servers().set_servers_to_run(1); world->collections= collection; diff --git a/tests/include.am b/tests/include.am index 7bc9e60b..56e71816 100644 --- a/tests/include.am +++ b/tests/include.am @@ -94,7 +94,7 @@ test-memcapable: tests/var tests/memcapable pahole-mem: tests/testapp @$(PAHOLE_COMMAND) tests/testapp -gdb-mem: tests/var tests/libmemcached-1.0/testapp +gdb-mem: tests/libmemcached-1.0/testapp @$(DEBUG_COMMAND) tests/libmemcached-1.0/testapp gdb-sasl: tests/sasl diff --git a/tests/libmemcached-1.0/all_tests.cc b/tests/libmemcached-1.0/all_tests.cc index b8f93fb5..789704b3 100644 --- a/tests/libmemcached-1.0/all_tests.cc +++ b/tests/libmemcached-1.0/all_tests.cc @@ -72,13 +72,13 @@ void get_world(Framework *world) { if (getenv("LIBMEMCACHED_SERVER_NUMBER")) { - int set_count= atoi(getenv("LIBMEMCACHED_SERVER_NUMBER")); - fatal_assert(set_count >= 0); - world->servers().set_count(set_count); + unsigned long int set_count= strtoul(getenv("LIBMEMCACHED_SERVER_NUMBER"), (char **) NULL, 10); + fatal_assert(set_count >= 1); + world->servers().set_servers_to_run(set_count); } else { - world->servers().set_count(8); + world->servers().set_servers_to_run(8); } world->collections= collection; diff --git a/tests/libmemcached-1.0/mem_functions.cc b/tests/libmemcached-1.0/mem_functions.cc index 8a1951e6..9140e721 100644 --- a/tests/libmemcached-1.0/mem_functions.cc +++ b/tests/libmemcached-1.0/mem_functions.cc @@ -620,7 +620,7 @@ test_return_t set_test(memcached_st *memc) test_literal_param("foo"), test_literal_param("when we sanitize"), time_t(0), (uint32_t)0); - test_true_got(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED, memcached_strerror(NULL, rc)); + test_true_got(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED, memcached_last_error_message(memc)); return TEST_SUCCESS; } @@ -715,11 +715,12 @@ test_return_t memcached_mget_mixed_memcached_get_TEST(memcached_st *memc) iter != keys.end(); iter++) { - test_compare(MEMCACHED_SUCCESS, - memcached_set(memc, - (*iter), 36, - NULL, 0, - time_t(0), uint32_t(0))); + test_compare_hint(MEMCACHED_SUCCESS, + memcached_set(memc, + (*iter), 36, + NULL, 0, + time_t(0), uint32_t(0)), + memcached_last_error_message(memc)); } for (ptrdiff_t loop= 0; loop < 20; loop++) @@ -738,7 +739,7 @@ test_return_t memcached_mget_mixed_memcached_get_TEST(memcached_st *memc) { result_count++; } - test_compare(keys.size(), result_count); + test_true(keys.size() >= result_count); } else { @@ -947,28 +948,31 @@ test_return_t add_wrapper(memcached_st *memc) test_return_t replace_test(memcached_st *memc) { - test_compare(return_value_based_on_buffering(memc), - memcached_set(memc, - test_literal_param(__func__), - test_literal_param("when we sanitize"), - time_t(0), uint32_t(0))); + test_compare_hint(return_value_based_on_buffering(memc), + memcached_set(memc, + test_literal_param(__func__), + test_literal_param("when we sanitize"), + time_t(0), uint32_t(0)), + memcached_last_error_message(memc)); - test_compare(MEMCACHED_SUCCESS, - memcached_replace(memc, - test_literal_param(__func__), - test_literal_param("first we insert some data"), - time_t(0), uint32_t(0))); + test_compare_hint(MEMCACHED_SUCCESS, + memcached_replace(memc, + test_literal_param(__func__), + test_literal_param("first we insert some data"), + time_t(0), uint32_t(0)), + memcached_last_error_message(memc)); return TEST_SUCCESS; } test_return_t delete_test(memcached_st *memc) { - test_compare(return_value_based_on_buffering(memc), - memcached_set(memc, - test_literal_param(__func__), - test_literal_param("when we sanitize"), - time_t(0), uint32_t(0))); + test_compare_hint(return_value_based_on_buffering(memc), + memcached_set(memc, + test_literal_param(__func__), + test_literal_param("when we sanitize"), + time_t(0), uint32_t(0)), + memcached_last_error_message(memc)); test_compare_hint(return_value_based_on_buffering(memc), memcached_delete(memc, @@ -1179,11 +1183,12 @@ test_return_t set_test2(memcached_st *memc) { for (uint32_t x= 0; x < 10; x++) { - test_compare(return_value_based_on_buffering(memc), - memcached_set(memc, - test_literal_param("foo"), - test_literal_param("train in the brain"), - time_t(0), uint32_t(0))); + test_compare_hint(return_value_based_on_buffering(memc), + memcached_set(memc, + test_literal_param("foo"), + test_literal_param("train in the brain"), + time_t(0), uint32_t(0)), + memcached_last_error_message(memc)); } return TEST_SUCCESS; @@ -1538,18 +1543,20 @@ test_return_t quit_test(memcached_st *memc) { const char *value= "sanford and sun"; - test_compare(return_value_based_on_buffering(memc), - memcached_set(memc, - test_literal_param(__func__), - value, strlen(value), - (time_t)10, (uint32_t)3)); + test_compare_hint(return_value_based_on_buffering(memc), + memcached_set(memc, + test_literal_param(__func__), + value, strlen(value), + (time_t)10, (uint32_t)3), + memcached_last_error_message(memc)); memcached_quit(memc); - test_compare(return_value_based_on_buffering(memc), - memcached_set(memc, - test_literal_param(__func__), - value, strlen(value), - (time_t)50, (uint32_t)9)); + test_compare_hint(return_value_based_on_buffering(memc), + memcached_set(memc, + test_literal_param(__func__), + value, strlen(value), + (time_t)50, (uint32_t)9), + memcached_last_error_message(memc)); return TEST_SUCCESS; } @@ -1762,7 +1769,7 @@ test_return_t mget_execute(memcached_st *original_memc) blob, sizeof(blob), 0, 0); test_true_got(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED, - memcached_strerror(NULL, rc)); + memcached_last_error_message(memc)); test_compare(query_id +1, memcached_query_id(memc)); } @@ -3297,7 +3304,12 @@ test_return_t noreply_test(memcached_st *memc) uint32_t flags; char* value=memcached_get(memc, key, strlen(key), &length, &flags, &ret); - test_true_got(ret == MEMCACHED_SUCCESS && value != NULL, memcached_strerror(NULL, ret)); + // For the moment we will just go to the next key + if (MEMCACHED_TIMEOUT == ret) + { + continue; + } + test_true_hint(ret == MEMCACHED_SUCCESS and value != NULL, memcached_last_error_message(memc)); switch (count) { case 0: /* FALLTHROUGH */ @@ -4789,7 +4801,7 @@ test_return_t kill_HUP_TEST(memcached_st *original_memc) 0, 0)); test_true_got(kill(pid, SIGHUP) == 0, strerror(errno)); - test_compare(MEMCACHED_SUCCESS, + test_compare(MEMCACHED_CONNECTION_FAILURE, memcached_set(memc, test_literal_param(__func__), // Keys test_literal_param(__func__), // Values diff --git a/tests/libmemcached_world.h b/tests/libmemcached_world.h index 18137986..5fab96fe 100644 --- a/tests/libmemcached_world.h +++ b/tests/libmemcached_world.h @@ -74,7 +74,7 @@ static void *world_create(libtest::server_startup_st& servers, test_return_t& er return NULL; } - for (uint32_t x= 0; x < servers.count(); x++) + for (uint32_t x= 0; x < servers.servers_to_run(); x++) { in_port_t port= libtest::get_free_port(); @@ -208,63 +208,66 @@ static bool world_destroy(void *object) typedef test_return_t (*libmemcached_test_callback_fn)(memcached_st *); -static test_return_t _runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container) -{ - if (func) +class LibmemcachedRunner : public libtest::Runner { +public: + test_return_t run(test_callback_fn* func, void *object) { - test_true(container); - test_true(container->memc); - test_return_t ret; - try { - ret= func(container->memc); - } - catch (std::exception& e) - { - libtest::Error << e.what(); - return TEST_FAILURE; - } - - return ret; + return _runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object); } - return TEST_SUCCESS; -} - -static test_return_t _pre_runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container) -{ - if (func) + test_return_t pre(test_callback_fn* func, void *object) { - return func(container->parent); + return _pre_runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object); } - return TEST_SUCCESS; -} - -static test_return_t _post_runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container) -{ - if (func) + test_return_t post(test_callback_fn* func, void *object) { - return func(container->parent); + return _post_runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object); } - return TEST_SUCCESS; -} - -class LibmemcachedRunner : public libtest::Runner { -public: - test_return_t run(test_callback_fn* func, void *object) +private: + test_return_t _runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container) { - return _runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object); + test_compare(true, check()); + + if (func) + { + test_true(container); + test_true(container->memc); + test_return_t ret; + try { + ret= func(container->memc); + } + catch (std::exception& e) + { + libtest::Error << e.what(); + return TEST_FAILURE; + } + + return ret; + } + + return TEST_SUCCESS; } - test_return_t pre(test_callback_fn* func, void *object) + test_return_t _pre_runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container) { - return _pre_runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object); + if (func) + { + return func(container->parent); + } + + return TEST_SUCCESS; } - test_return_t post(test_callback_fn* func, void *object) + test_return_t _post_runner_default(libmemcached_test_callback_fn func, libmemcached_test_container_st *container) { - return _post_runner_default(libmemcached_test_callback_fn(func), (libmemcached_test_container_st*)object); + if (func) + { + return func(container->parent); + } + + return TEST_SUCCESS; } }; diff --git a/tests/libmemcached_world_socket.h b/tests/libmemcached_world_socket.h index d867ef88..b1748cab 100644 --- a/tests/libmemcached_world_socket.h +++ b/tests/libmemcached_world_socket.h @@ -63,10 +63,10 @@ static void *world_create(libtest::server_startup_st& servers, test_return_t& er return NULL; } - for (uint32_t x= 0; x < servers.count(); x++) + for (uint32_t x= 0; x < servers.servers_to_run(); x++) { const char *argv[1]= { "memcached" }; - if (not servers.start_socket_server("memcached", libtest::get_free_port(), 1, argv)) + if (servers.start_socket_server("memcached", libtest::get_free_port(), 1, argv) == false) { fatal_message("Could not launch memcached"); }