Merge in all updates for autoconf
authorBrian Aker <brian@tangent.org>
Tue, 2 Aug 2011 17:15:15 +0000 (10:15 -0700)
committerBrian Aker <brian@tangent.org>
Tue, 2 Aug 2011 17:15:15 +0000 (10:15 -0700)
35 files changed:
.bzrignore
Makefile.am
clients/include.am
configure.ac
example/byteorder.cc [new file with mode: 0644]
example/byteorder.h [new file with mode: 0644]
example/include.am
example/interface_v0.c
example/interface_v1.c
example/memcached_light.c
libhashkit/include.am
libmemcached/byteorder.cc
libmemcached/common.h
libmemcached/continuum.hpp [new file with mode: 0644]
libmemcached/fetch.cc
libmemcached/include.am
libmemcached/server_instance.h [new file with mode: 0644]
libmemcached/string.cc
libmemcached/string.h
libmemcached/util/include.am
libmemcached/visibility.h
libmemcachedinternal/include.am [new file with mode: 0644]
libmemcachedinternal/util/include.am [new file with mode: 0644]
libtest/include.am
m4/pandora_enable_dtrace.m4
tests/include.am
tests/internals.cc [new file with mode: 0644]
tests/ketama.cc [new file with mode: 0644]
tests/ketama.h [new file with mode: 0644]
tests/ketama_test_cases.h
tests/ketama_test_cases_spy.h
tests/mem_functions.cc
tests/parser.cc
tests/string.cc
tests/string.h

index 42903be0e647ef7a48bc19c7c7ab36260d0f2a33..8e38d30d395f84fe473a66c5a35aed27679d4ba0 100644 (file)
@@ -2,11 +2,14 @@
 *.OTHER
 *.THIS
 *.exe
+*.gz
 *.lo
 *.orig
 *.output
 *.pop
+*.rej
 *.rpm
+*.tar
 */*.l[oa]
 */*/*.l[oa]
 */*/.deps
@@ -29,6 +32,7 @@ Makefile.in
 TAGS
 aclocal.m4
 autom4te.cache
+autoscan.log
 clients/memaslap
 clients/memcapable
 clients/memcat
@@ -55,6 +59,7 @@ config/pandora_vc_revinfo
 config/plugin.ac
 config/top.h
 configure
+configure.scan
 docs/*.[13]
 docs/*.html
 docs/changes
@@ -67,13 +72,6 @@ docs/man/*
 docs/text
 example/memcached_light
 libhashkit/configure.h
-libmemcached-*.tar.gz
-libmemcached-0.30-1.src.rpm
-libmemcached-0.30-1.x86_64.rpm
-libmemcached-0.31-1.src.rpm
-libmemcached-0.31-1.x86_64.rpm
-libmemcached-0.37-1.src.rpm
-libmemcached-0.37-1.x86_64.rpm
 libmemcached-?.??/
 libmemcached/configure.h
 libmemcached/dtrace_probes.h
@@ -89,6 +87,11 @@ ltoptions.m4
 ltsugar.m4
 ltversion.m4
 lt~obsolete.m4
+m4/libtool.m4 
+m4/ltoptions.m4
+m4/ltsugar.m4
+m4/ltversion.m4
+m4/lt~obsolete.m4
 out
 patch
 patch2
@@ -104,6 +107,7 @@ tests/c_test
 tests/cycle
 tests/hash_plus
 tests/hashplus
+tests/internals
 tests/memcapable
 tests/memplus
 tests/memslap
index b47dfc827666bad98a2782c0e2b78c2805a1455c..5b600d5a6c24b565ee7091c2e32d11b0baa3db76 100644 (file)
@@ -33,19 +33,23 @@ EXTRA_DIST= \
            m4/po.m4 \
            m4/progtest.m4
 
-include libtest/include.am
-include libmemcached/include.am
-include libmemcached/protocol/include.am
-include libmemcached/util/include.am
+libmemcached_libmemcached_la_LDFLAGS=
+
 include clients/include.am
-include libhashkit/include.am
-include tests/include.am
+include docs/include.am
 include example/include.am
-include support/include.am
+include libhashkit/include.am
+include libmemcached/include.am
+include libmemcached/util/include.am
+include libmemcached/protocol/include.am
+include libmemcachedinternal/include.am
+include libmemcachedinternal/util/include.am
+include libtest/include.am
 include poll/include.am
+include support/include.am
+include tests/include.am
 include util/include.am
 include win32/include.am
-include docs/include.am
 
 docs: html man
 
index 281aa0b92060dee3909454cafc0f6b48d9776ea6..98511366033a56f474dca4efdaddc7d4430381d0 100644 (file)
@@ -74,6 +74,7 @@ clients_memerror_LDADD= $(CLIENTS_LDADDS)
 
 clients_memslap_SOURCES = clients/memslap.cc
 clients_memslap_SOURCES+= clients/generator.cc clients/execute.cc
+clients_memslap_CXXFLAGS = ${PTHREAD_CFLAGS}
 clients_memslap_LDADD = $(PTHREAD_LIBS) $(CLIENTS_LDADDS)
 
 clients_memaslap_SOURCES= \
index ca51592ec2458a98f42458bea2d1d78c42ef9e6f..3fc5871f937c3ba153920528cb84744681e534a7 100644 (file)
@@ -130,6 +130,51 @@ PANDORA_PRINT_CALLSTACK
 PANDORA_HAVE_SASL
 WITH_LIBGEARMAN
 
+AC_CHECK_FUNCS([alarm])
+AC_CHECK_FUNCS([dup2])
+AC_CHECK_FUNCS([gettimeofday])
+AC_CHECK_FUNCS([memchr])
+AC_CHECK_FUNCS([memmove])
+AC_CHECK_FUNCS([memset])
+AC_CHECK_FUNCS([select])
+AC_CHECK_FUNCS([setenv])
+AC_CHECK_FUNCS([socket])
+AC_CHECK_FUNCS([sqrt])
+AC_CHECK_FUNCS([strcasecmp])
+AC_CHECK_FUNCS([strchr])
+AC_CHECK_FUNCS([strdup])
+AC_CHECK_FUNCS([strerror])
+AC_CHECK_FUNCS([strtol])
+AC_CHECK_FUNCS([strtoul])
+AC_CHECK_FUNCS([strtoull])
+AC_CHECK_HEADERS([arpa/inet.h])
+AC_CHECK_HEADERS([fcntl.h])
+AC_CHECK_HEADERS([libintl.h])
+AC_CHECK_HEADERS([limits.h])
+AC_CHECK_HEADERS([malloc.h])
+AC_CHECK_HEADERS([netdb.h])
+AC_CHECK_HEADERS([netinet/in.h])
+AC_CHECK_HEADERS([stddef.h])
+AC_CHECK_HEADERS([sys/time.h])
+AC_FUNC_ALLOCA
+AC_FUNC_ERROR_AT_LINE
+AC_FUNC_FORK
+AC_FUNC_MALLOC
+AC_FUNC_REALLOC
+AC_FUNC_STRERROR_R
+AC_HEADER_STDBOOL
+AC_TYPE_INT16_T
+AC_TYPE_INT32_T
+AC_TYPE_INT64_T
+AC_TYPE_INT8_T
+AC_TYPE_OFF_T
+AC_TYPE_PID_T
+AC_TYPE_SSIZE_T
+AC_TYPE_UINT16_T
+AC_TYPE_UINT32_T
+AC_TYPE_UINT64_T
+AC_TYPE_UINT8_T
+
 dnl The sasl functions should only be visible if we build with sasl support
 AS_IF([test "x$ac_cv_sasl" = "xyes"],
       [LIBMEMCACHED_WITH_SASL_SUPPORT="#define LIBMEMCACHED_WITH_SASL_SUPPORT 1"])
diff --git a/example/byteorder.cc b/example/byteorder.cc
new file mode 100644 (file)
index 0000000..5b25624
--- /dev/null
@@ -0,0 +1,89 @@
+/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ * 
+ *  Libmemcached library
+ *
+ *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ *  Copyright (C) 2006-2009 Brian Aker All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are
+ *  met:
+ *
+ *      * Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ *
+ *      * Redistributions in binary form must reproduce the above
+ *  copyright notice, this list of conditions and the following disclaimer
+ *  in the documentation and/or other materials provided with the
+ *  distribution.
+ *
+ *      * The names of its contributors may not be used to endorse or
+ *  promote products derived from this software without specific prior
+ *  written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <config.h>
+
+#include <sys/types.h>
+
+#include <example/byteorder.h>
+
+/* Byte swap a 64-bit number. */
+#ifndef swap64
+static inline uint64_t swap64(uint64_t in)
+{
+#ifndef WORDS_BIGENDIAN
+  /* Little endian, flip the bytes around until someone makes a faster/better
+   * way to do this. */
+  uint64_t rv= 0;
+  for (uint8_t x= 0; x < 8; x++)
+  {
+    rv= (rv << 8) | (in & 0xff);
+    in >>= 8;
+  }
+  return rv;
+#else
+  /* big-endian machines don't need byte swapping */
+  return in;
+#endif // WORDS_BIGENDIAN
+}
+#endif
+
+#ifdef HAVE_HTONLL
+
+uint64_t example_ntohll(uint64_t value)
+{
+  return ntohll(value);
+}
+
+uint64_t example_htonll(uint64_t value)
+{
+  return htonll(value);
+}
+
+#else // HAVE_HTONLL
+
+uint64_t example_ntohll(uint64_t value)
+{
+  return swap64(value);
+}
+
+uint64_t example_htonll(uint64_t value)
+{
+  return swap64(value);
+}
+
+#endif // HAVE_HTONLL
diff --git a/example/byteorder.h b/example/byteorder.h
new file mode 100644 (file)
index 0000000..1e319a3
--- /dev/null
@@ -0,0 +1,49 @@
+/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ * 
+ *  Byteorder for example
+ *
+ *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are
+ *  met:
+ *
+ *      * Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ *
+ *      * Redistributions in binary form must reproduce the above
+ *  copyright notice, this list of conditions and the following disclaimer
+ *  in the documentation and/or other materials provided with the
+ *  distribution.
+ *
+ *      * The names of its contributors may not be used to endorse or
+ *  promote products derived from this software without specific prior
+ *  written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+uint64_t example_ntohll(uint64_t);
+
+uint64_t example_htonll(uint64_t);
+
+#ifdef __cplusplus
+}
+#endif
index 561eebc8d7f2a249f3b65f7de813e62828ce3b61..5a4dad149e27420d3026a65b857ce6fd0d84385c 100644 (file)
@@ -10,7 +10,7 @@ example_memcached_light_SOURCES= \
                                 example/interface_v0.c \
                                 example/interface_v1.c \
                                 example/memcached_light.c \
-                                libmemcached/byteorder.cc \
+                                example/byteorder.cc \
                                 example/memcached_light.h \
                                 example/storage.h
 
index a5462734fb45ab3d60af9d17046f348f00d687f8..625b4dd92c203d4ad64e5f515c08f2251e91c953 100644 (file)
@@ -15,7 +15,7 @@
 #include <string.h>
 
 #include <libmemcached/protocol_handler.h>
-#include <libmemcached/byteorder.h>
+#include <example/byteorder.h>
 #include "storage.h"
 #include "memcached_light.h"
 
@@ -78,7 +78,7 @@ static protocol_binary_response_status get_command_handler(const void *cookie,
     msg.response.message.body.flags= htonl(item->flags);
     char *ptr= (char*)(msg.response.bytes + sizeof(*header) + 4);
     uint32_t bodysize= 4;
-    msg.response.message.header.response.cas= memcached_htonll(item->cas);
+    msg.response.message.header.response.cas= example_htonll(item->cas);
     if (opcode == PROTOCOL_BINARY_CMD_GETK || opcode == PROTOCOL_BINARY_CMD_GETKQ)
     {
       memcpy(ptr, item->key, item->nkey);
@@ -172,8 +172,8 @@ static protocol_binary_response_status arithmetic_command_handler(const void *co
   };
 
   uint16_t keylen= ntohs(header->request.keylen);
-  uint64_t initial= memcached_ntohll(req->message.body.initial);
-  uint64_t delta= memcached_ntohll(req->message.body.delta);
+  uint64_t initial= example_ntohll(req->message.body.initial);
+  uint64_t delta= example_ntohll(req->message.body.delta);
   uint32_t expiration= ntohl(req->message.body.expiration);
   uint32_t flags= 0;
   void *key= req->bytes + sizeof(req->bytes);
@@ -222,8 +222,8 @@ static protocol_binary_response_status arithmetic_command_handler(const void *co
   if (rval == PROTOCOL_BINARY_RESPONSE_SUCCESS)
   {
     response.message.header.response.bodylen= ntohl(8);
-    response.message.body.value= memcached_ntohll((*(uint64_t*)item->data));
-    response.message.header.response.cas= memcached_ntohll(item->cas);
+    response.message.body.value= example_ntohll((*(uint64_t*)item->data));
+    response.message.header.response.cas= example_ntohll(item->cas);
 
     release_item(item);
     if (header->request.opcode == PROTOCOL_BINARY_CMD_INCREMENTQ ||
@@ -266,7 +266,7 @@ static protocol_binary_response_status concat_command_handler(const void *cookie
 {
   protocol_binary_response_status rval= PROTOCOL_BINARY_RESPONSE_SUCCESS;
   uint16_t keylen= ntohs(header->request.keylen);
-  uint64_t cas= memcached_ntohll(header->request.cas);
+  uint64_t cas= example_ntohll(header->request.cas);
   void *key= header + 1;
   uint32_t vallen= ntohl(header->request.bodylen) - keylen;
   void *val= (char*)key + keylen;
@@ -317,7 +317,7 @@ static protocol_binary_response_status concat_command_handler(const void *cookie
             .opcode= header->request.opcode,
             .status= htons(rval),
             .opaque= header->request.opaque,
-            .cas= memcached_htonll(cas),
+            .cas= example_htonll(cas),
           }
         }
       };
@@ -357,7 +357,7 @@ static protocol_binary_response_status set_command_handler(const void *cookie,
     struct item* item= get_item(key, keylen);
     if (item != NULL)
     {
-      if (item->cas != memcached_ntohll(header->request.cas))
+      if (item->cas != example_ntohll(header->request.cas))
       {
         release_item(item);
         response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS);
@@ -379,7 +379,7 @@ static protocol_binary_response_status set_command_handler(const void *cookie,
     /* SETQ shouldn't return a message */
     if (header->request.opcode == PROTOCOL_BINARY_CMD_SET)
     {
-      response.message.header.response.cas= memcached_htonll(item->cas);
+      response.message.header.response.cas= example_htonll(item->cas);
       release_item(item);
       return response_handler(cookie, header, (void*)&response);
     }
@@ -426,7 +426,7 @@ static protocol_binary_response_status add_command_handler(const void *cookie,
       /* ADDQ shouldn't return a message */
       if (header->request.opcode == PROTOCOL_BINARY_CMD_ADD)
       {
-        response.message.header.response.cas= memcached_htonll(item->cas);
+        response.message.header.response.cas= example_htonll(item->cas);
         release_item(item);
         return response_handler(cookie, header, (void*)&response);
       }
@@ -471,7 +471,7 @@ static protocol_binary_response_status replace_command_handler(const void *cooki
   {
     response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_KEY_ENOENT);
   }
-  else if (header->request.cas == 0 || memcached_ntohll(header->request.cas) == item->cas)
+  else if (header->request.cas == 0 || example_ntohll(header->request.cas) == item->cas)
   {
     release_item(item);
     delete_item(key, keylen);
@@ -487,7 +487,7 @@ static protocol_binary_response_status replace_command_handler(const void *cooki
       /* REPLACEQ shouldn't return a message */
       if (header->request.opcode == PROTOCOL_BINARY_CMD_REPLACE)
       {
-        response.message.header.response.cas= memcached_htonll(item->cas);
+        response.message.header.response.cas= example_htonll(item->cas);
         release_item(item);
         return response_handler(cookie, header, (void*)&response);
       }
index 36c0468b28e65b8be047e578217b39295c9c5bde..4fbfed5cbab75630c60e039ef398bba58971c232 100644 (file)
@@ -19,7 +19,7 @@
 #include <string.h>
 
 #include <libmemcached/protocol_handler.h>
-#include <libmemcached/byteorder.h>
+#include <example/byteorder.h>
 #include "storage.h"
 
 static protocol_binary_response_status add_handler(const void *cookie,
index 6a87ff1917ace469f334c7fc62be6139e3a3bf5d..0249ac6c1fc0240de25628539ab7c6037e6ba57a 100644 (file)
@@ -35,7 +35,7 @@
 #include <event.h>
 
 #include <libmemcached/protocol_handler.h>
-#include <libmemcached/byteorder.h>
+#include <example/byteorder.h>
 #include "storage.h"
 #include "memcached_light.h"
 
index 43300585b6124cde647a4434f00aca8f1a70d6a8..cb424e1d5c408020bcf06265c7dfdaa29a589b98 100644 (file)
@@ -54,6 +54,14 @@ if INCLUDE_MURMUR_SRC
 libhashkit_libhashkit_la_SOURCES+= libhashkit/murmur.cc
 endif
 
+libhashkit_libhashkit_la_CPPFLAGS= \
+                                  ${AM_CPPFLAGS} \
+                                  -DBUILDING_HASHKIT
+
+libhashkit_libhashkit_la_CFLAGS= \
+                                  ${AM_CFLAGS} \
+                                  -DBUILDING_HASHKIT
+
 libhashkit_libhashkit_la_CXXFLAGS= \
                                   ${AM_CXXFLAGS} \
                                   -DBUILDING_HASHKIT
@@ -62,6 +70,7 @@ libhashkit_libhashkit_la_LDFLAGS= \
                                  $(LIBM) \
                                  -version-info $(HASHKIT_LIBRARY_VERSION)
 
+# library used for testing
 noinst_LTLIBRARIES+= libhashkit/libhashkitinc.la
 
 libhashkit_libhashkitinc_la_SOURCES= ${libhashkit_libhashkit_la_SOURCES}
index 80ea0210b9857dcab26a327bd815626829394404..7e141756000cc3a5977e5405d9ff1335d77e4a3c 100644 (file)
  *
  */
 
-#include <config.h>
-
-#include <sys/types.h>
-
-#include <libmemcached/visibility.h>
-#include <libmemcached/byteorder.h>
+#include <libmemcached/common.h>
 
 /* Byte swap a 64-bit number. */
 #ifndef swap64
index 49d309c8759ed0a2a8e7f2f788bb2b03eda02203..469ef3e21a005cfd73922a95cdb37205262b3898 100644 (file)
 #include <libmemcached/is.h>
 #include <libmemcached/namespace.h>
 
+#include <libmemcached/server_instance.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-typedef struct memcached_server_st * memcached_server_write_instance_st;
-
 typedef memcached_return_t (*memcached_server_execute_fn)(memcached_st *ptr, memcached_server_write_instance_st server, void *context);
 
 LIBMEMCACHED_LOCAL
@@ -111,12 +111,7 @@ memcached_return_t memcached_server_execute(memcached_st *ptr,
 #include <libmemcached/assert.hpp>
 #endif
 
-/* string value */
-struct memcached_continuum_item_st
-{
-  uint32_t index;
-  uint32_t value;
-};
+#include <libmemcached/continuum.hpp>
 
 #if !defined(__GNUC__) || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
 
diff --git a/libmemcached/continuum.hpp b/libmemcached/continuum.hpp
new file mode 100644 (file)
index 0000000..e39fcdc
--- /dev/null
@@ -0,0 +1,46 @@
+/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ * 
+ *  LibMemcached
+ *
+ *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ *  Copyright (C) 2006-2009 Brian Aker
+ *  All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are
+ *  met:
+ *
+ *      * Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ *
+ *      * Redistributions in binary form must reproduce the above
+ *  copyright notice, this list of conditions and the following disclaimer
+ *  in the documentation and/or other materials provided with the
+ *  distribution.
+ *
+ *      * The names of its contributors may not be used to endorse or
+ *  promote products derived from this software without specific prior
+ *  written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#pragma once
+
+/* string value */
+struct memcached_continuum_item_st
+{
+  uint32_t index;
+  uint32_t value;
+};
index d5730105bd069677c346f9e57ff823eb882d1ec8..8867d53d0cc711bc5b6cee9c001bd573015c361f 100644 (file)
@@ -86,7 +86,9 @@ char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length,
   }
 
   if (value_length)
+  {
     *value_length= memcached_string_length(&result_buffer->value);
+  }
 
   if (key)
   {
index 3a0a0ac4336723a3ff2edf670f1901640f063f98..4950f3ca6409e16313c8e323cb3e0834d3981859 100644 (file)
@@ -16,6 +16,7 @@ noinst_HEADERS+= \
                 libmemcached/backtrace.hpp \
                 libmemcached/byteorder.h \
                 libmemcached/common.h \
+                libmemcached/continuum.hpp \
                 libmemcached/do.hpp \
                 libmemcached/error.hpp \
                 libmemcached/initialize_query.h \
@@ -30,6 +31,7 @@ noinst_HEADERS+= \
                 libmemcached/protocol/binary_handler.h \
                 libmemcached/protocol/common.h \
                 libmemcached/response.h \
+                libmemcached/server_instance.h \
                 libmemcached/string.hpp \
                 libmemcached/virtual_bucket.h
 
@@ -79,25 +81,6 @@ nobase_include_HEADERS+= \
                         libmemcached/visibility.h \
                         libmemcached/watchpoint.h
 
-# This noinst lib contains things we want to be ABI private but still want to
-# either use in client programs or be able to test in test cases
-# These symbols will not be exposed in the shipped .so
-noinst_LTLIBRARIES+= libmemcached/libmemcachedinternal.la
-libmemcached_libmemcachedinternal_la_SOURCES= \
-                                             libmemcached/array.c \
-                                             libmemcached/backtrace.cc \
-                                             libmemcached/error.cc \
-                                             libmemcached/string.cc
-libmemcached_libmemcachedinternal_la_CFLAGS= \
-                                    ${AM_CFLAGS} \
-                                    ${NO_CONVERSION} \
-                                    -DBUILDING_LIBMEMCACHED
-
-libmemcached_libmemcachedinternal_la_CXXFLAGS= \
-                                      ${AM_CXXFLAGS} \
-                                      ${NO_CONVERSION} \
-                                      -DBUILDING_LIBMEMCACHED
-
 lib_LTLIBRARIES+= libmemcached/libmemcached.la
 libmemcached_libmemcached_la_CFLAGS= \
                                     ${AM_CFLAGS} \
@@ -156,7 +139,7 @@ libmemcached/options.cc: libmemcached/csl/parser.h
 
 libmemcached_libmemcached_la_DEPENDENCIES=
 libmemcached_libmemcached_la_LIBADD= $(LIBM)
-libmemcached_libmemcached_la_LDFLAGS= ${AM_LDFLAGS} -version-info ${MEMCACHED_LIBRARY_VERSION}
+libmemcached_libmemcached_la_LDFLAGS+= ${AM_LDFLAGS} -version-info ${MEMCACHED_LIBRARY_VERSION}
 
 if HAVE_SASL
 libmemcached_libmemcached_la_LDFLAGS+= $(LTLIBSASL) $(LTLIBSASL2)
@@ -166,22 +149,19 @@ endif
 if HAVE_DTRACE
 BUILT_SOURCES+= libmemcached/dtrace_probes.h
 CLEANFILES+= libmemcached/dtrace_probes.h
-endif
+CLEANFILES+= libmemcached/libmemcached_probes.o
 
-if DTRACE_NEEDS_OBJECTS
-libmemcached_libmemcached_la_SOURCES += libmemcached/libmemcached_probes.d
 libmemcached_libmemcached_la_DEPENDENCIES += libmemcached/libmemcached_probes.o
 libmemcached_libmemcached_la_LIBADD += libmemcached/libmemcached_probes.o
-CLEANFILES+= libmemcached/libmemcached_probes.o
+libmemcached_libmemcached_la_SOURCES += libmemcached/libmemcached_probes.d
 endif
 
 SUFFIXES+= .d
 
 libmemcached/dtrace_probes.h: libmemcached/libmemcached_probes.d
-       $(DTRACE) $(DTRACEFLAGS) -h -o libmemcached/dtrace_probes.h -s ${top_srcdir}/libmemcached/libmemcached_probes.d
+       $(DTRACE) $(DTRACEFLAGS) -h -o ${top_srcdir}/libmemcached/dtrace_probes.h -s ${top_srcdir}/libmemcached/libmemcached_probes.d
 
 libmemcached/libmemcached_probes.o: libmemcached/libmemcached_probes.d ${libmemcached_libmemcached_la_OBJECTS} config.h
 
 .d.o:
-       $(DTRACE) $(DTRACEFLAGS) -o $@ -G -s $< `grep '^pic_object' ${top_builddir}/libmemcached/*.lo | cut -f 2 -d\' | sed "s/^/${top_builddir}\/libmemcached\//"`
-
+       $(DTRACE) $(DTRACEFLAGS) -o $@ -G -s libmemcached/libmemcached_probes.d
diff --git a/libmemcached/server_instance.h b/libmemcached/server_instance.h
new file mode 100644 (file)
index 0000000..8c43992
--- /dev/null
@@ -0,0 +1,48 @@
+/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ * 
+ *  LibMemcached
+ *
+ *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ *  All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are
+ *  met:
+ *
+ *      * Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ *
+ *      * Redistributions in binary form must reproduce the above
+ *  copyright notice, this list of conditions and the following disclaimer
+ *  in the documentation and/or other materials provided with the
+ *  distribution.
+ *
+ *      * The names of its contributors may not be used to endorse or
+ *  promote products derived from this software without specific prior
+ *  written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct memcached_server_st * memcached_server_write_instance_st;
+
+#ifdef __cplusplus
+}
+#endif
index 7bc7fec0036e87c293d87b1ee8c31287af515472..d482d4cd4d21630feac0412b5d927ffcb8645a01 100644 (file)
@@ -191,7 +191,9 @@ memcached_return_t memcached_string_reset(memcached_string_st *string)
 void memcached_string_free(memcached_string_st *ptr)
 {
   if (not ptr)
+  {
     return;
+  }
 
   if (ptr->string)
   {
@@ -215,7 +217,7 @@ memcached_return_t memcached_string_check(memcached_string_st *string, size_t ne
 
 size_t memcached_string_length(const memcached_string_st *self)
 {
-  return (size_t)(self->end - self->string);
+  return size_t(self->end -self->string);
 }
 
 size_t memcached_string_size(const memcached_string_st *self)
index 360d9008b02718c492bce616750ebb15c30f6389..01097a653edc1ee9563158fd256e5fd7266b5c93 100644 (file)
@@ -60,8 +60,6 @@ struct memcached_string_st {
   } options;
 };
 
-#ifdef BUILDING_LIBMEMCACHED
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -109,5 +107,3 @@ void memcached_string_set_length(memcached_string_st *self, size_t length);
 #ifdef __cplusplus
 }
 #endif
-
-#endif
index 9ac9c8c44065c455a729fb9bd8995b10a4e012bc..2f44651761e4cba157164ffe8aeb26150fe3d627 100644 (file)
@@ -2,7 +2,6 @@
 # included from Top Level Makefile.am
 # All paths should be given relative to the root
 
-if BUILD_LIBMEMCACHEDUTIL
 nobase_include_HEADERS+= \
                         libmemcached/memcached_util.h \
                         libmemcached/util.h \
@@ -12,7 +11,6 @@ nobase_include_HEADERS+= \
                         libmemcached/util/pool.h \
                         libmemcached/util/version.h
 lib_LTLIBRARIES+= libmemcached/libmemcachedutil.la
-endif
 
 libmemcached_libmemcachedutil_la_SOURCES= \
                                          libmemcached/backtrace.cc \
@@ -31,7 +29,7 @@ libmemcached_libmemcachedutil_la_CXXFLAGS= \
                                           ${NO_CONVERSION} \
                                           ${PTHREAD_CFLAGS} \
                                           -DBUILDING_LIBMEMCACHED
-libmemcached_libmemcachedutil_la_LIBADD= libmemcached/libmemcached.la
-libmemcached_libmemcachedutil_la_LDFLAGS= ${AM_LDFLAGS} ${PTHREAD_LIBS} -version-info ${MEMCACHED_UTIL_LIBRARY_VERSION}
+libmemcached_libmemcachedutil_la_LIBADD= libmemcached/libmemcached.la ${PTHREAD_LIBS}
+libmemcached_libmemcachedutil_la_LDFLAGS= ${AM_LDFLAGS} -version-info ${MEMCACHED_UTIL_LIBRARY_VERSION}
 libmemcached_libmemcachedutil_la_DEPENDENCIES= libmemcached/libmemcached.la
 
index 646806ac94d8bf588a64a4e5256c32758d368004..d4e4eea05f15051029e4ca77051fd84c1070b18e 100644 (file)
  * LIBMEMCACHED_LOCAL is used for non-api symbols.
  */
 
-#if defined(BUILDING_LIBMEMCACHED)
+#if defined(BUILDING_LIBMEMCACHEDINTERNAL)
 # if defined(HAVE_VISIBILITY) && HAVE_VISIBILITY
 #  define LIBMEMCACHED_API __attribute__ ((visibility("default")))
-#  define LIBMEMCACHED_LOCAL  __attribute__ ((visibility("hidden")))
+#  define LIBMEMCACHED_LOCAL  __attribute__ ((visibility("default")))
 # elif defined (__SUNPRO_C) && (__SUNPRO_C >= 0x550)
 #  define LIBMEMCACHED_API __global
-#  define LIBMEMCACHED_LOCAL __hidden
+#  define LIBMEMCACHED_LOCAL __global
 # elif defined(_MSC_VER)
 #  define LIBMEMCACHED_API extern __declspec(dllexport) 
-#  define LIBMEMCACHED_LOCAL
-# else
-#  define LIBMEMCACHED_API
-#  define LIBMEMCACHED_LOCAL
-# endif /* defined(HAVE_VISIBILITY) */
-#else  /* defined(BUILDING_LIBMEMCACHED) */
-# if defined(_MSC_VER)
-#  define LIBMEMCACHED_API extern __declspec(dllimport) 
-#  define LIBMEMCACHED_LOCAL
+#  define LIBMEMCACHED_LOCAL extern __declspec(dllexport)
 # else
 #  define LIBMEMCACHED_API
 #  define LIBMEMCACHED_LOCAL
-# endif /* defined(_MSC_VER) */
-#endif /* defined(BUILDING_LIBMEMCACHED) */
+# endif
+#else
+# if defined(BUILDING_LIBMEMCACHED)
+#  if defined(HAVE_VISIBILITY) && HAVE_VISIBILITY
+#   define LIBMEMCACHED_API __attribute__ ((visibility("default")))
+#   define LIBMEMCACHED_LOCAL  __attribute__ ((visibility("hidden")))
+#  elif defined (__SUNPRO_C) && (__SUNPRO_C >= 0x550)
+#   define LIBMEMCACHED_API __global
+#   define LIBMEMCACHED_LOCAL __hidden
+#  elif defined(_MSC_VER)
+#   define LIBMEMCACHED_API extern __declspec(dllexport) 
+#   define LIBMEMCACHED_LOCAL
+#  else
+#   define LIBMEMCACHED_API
+#   define LIBMEMCACHED_LOCAL
+#  endif /* defined(HAVE_VISIBILITY) */
+# else  /* defined(BUILDING_LIBMEMCACHED) */
+#  if defined(_MSC_VER)
+#   define LIBMEMCACHED_API extern __declspec(dllimport) 
+#   define LIBMEMCACHED_LOCAL
+#  else
+#   define LIBMEMCACHED_API
+#   define LIBMEMCACHED_LOCAL
+#  endif /* defined(_MSC_VER) */
+# endif /* defined(BUILDING_LIBMEMCACHED) */
+#endif /* defined(BUILDING_LIBMEMCACHEDINTERNAL) */
diff --git a/libmemcachedinternal/include.am b/libmemcachedinternal/include.am
new file mode 100644 (file)
index 0000000..a6153cd
--- /dev/null
@@ -0,0 +1,25 @@
+# vim:ft=automake
+# included from Top Level Makefile.am
+# All paths should be given relative to the root
+
+# This noinst lib contains things we want to be ABI private but still want to
+# either use in client programs or be able to test in test cases These symbols
+# will not be exposed in the shipped .so
+noinst_LTLIBRARIES+= libmemcachedinternal/libmemcachedinternal.la
+
+libmemcachedinternal_libmemcachedinternal_la_SOURCES= $(libmemcached_libmemcached_la_SOURCES)
+libmemcachedinternal_libmemcachedinternal_la_CFLAGS= \
+                                                    ${AM_CFLAGS} \
+                                                    ${NO_CONVERSION} \
+                                                    -DBUILDING_LIBMEMCACHEDINTERNAL
+libmemcachedinternal_libmemcachedinternal_la_CPPFLAGS= \
+                                                      ${AM_CPPFLAGS} \
+                                                      ${NO_CONVERSION} \
+                                                      -DBUILDING_LIBMEMCACHEDINTERNAL
+libmemcachedinternal_libmemcachedinternal_la_CXXFLAGS= \
+                                                      ${AM_CXXFLAGS} \
+                                                      ${NO_CONVERSION} \
+                                                      -DBUILDING_LIBMEMCACHEDINTERNAL
+libmemcachedinternal_libmemcachedinternal_la_LDFLAGS= ${AM_LDFLAGS}
+libmemcachedinternal_libmemcachedinternal_la_LIBADD= $(libmemcached_libmemcached_la_LIBADD)
+libmemcachedinternal_libmemcachedinternal_la_DEPENDENCIES= $(libmemcached_libmemcached_la_DEPENDENCIES)
diff --git a/libmemcachedinternal/util/include.am b/libmemcachedinternal/util/include.am
new file mode 100644 (file)
index 0000000..6458925
--- /dev/null
@@ -0,0 +1,25 @@
+# vim:ft=automake
+# included from Top Level Makefile.am
+# All paths should be given relative to the root
+
+# This noinst lib contains things we want to be ABI private but still want to
+# either use in client programs or be able to test in test cases These symbols
+# will not be exposed in the shipped .so
+noinst_LTLIBRARIES+= libmemcachedinternal/libmemcachedutilinternal.la
+
+libmemcachedinternal_libmemcachedutilinternal_la_SOURCES= $(libmemcached_libmemcachedutil_la_SOURCES)
+libmemcachedinternal_libmemcachedutilinternal_la_CFLAGS= \
+                                                        ${AM_CFLAGS} \
+                                                        ${NO_CONVERSION} \
+                                                        ${PTHREAD_CFLAGS} \
+                                                        -DBUILDING_LIBMEMCACHEDINTERNAL
+libmemcachedinternal_libmemcachedutilinternal_la_CXXFLAGS= \
+                                                          ${AM_CXXFLAGS} \
+                                                          ${NO_CONVERSION} \
+                                                          ${PTHREAD_CFLAGS} \
+                                                          -DBUILDING_LIBMEMCACHEDINTERNAL
+libmemcachedinternal_libmemcachedutilinternal_la_LIBADD= libmemcachedinternal/libmemcachedinternal.la ${PTHREAD_LIBS}
+libmemcachedinternal_libmemcachedutilinternal_la_LDFLAGS= ${AM_LDFLAGS} -version-info ${MEMCACHED_UTIL_LIBRARY_VERSION}
+libmemcachedinternal_libmemcachedutilinternal_la_DEPENDENCIES= libmemcached/libmemcached.la
+
+
index 71b5821f54e71c7ca02e11013e76b1706b04000b..2ed437c2af36ad30c087cc84a5f6807219e9b8a7 100644 (file)
@@ -78,19 +78,26 @@ libtest_libtest_la_SOURCES= \
                            libtest/signal.cc \
                            libtest/test.cc
 
-libtest_libtest_la_CFLAGS= ${AM_CFLAGS} ${NO_CONVERSION} -DBUILDING_LIBTEST
-libtest_libtest_la_CXXFLAGS= ${AM_CXXFLAGS} ${NO_CONVERSION} -DBUILDING_LIBTEST
+libtest_libtest_la_CFLAGS= ${AM_CFLAGS}
+libtest_libtest_la_CFLAGS+= ${NO_CONVERSION}
+libtest_libtest_la_CFLAGS+= $(PTHREAD_CFLAGS)
+libtest_libtest_la_CFLAGS+= -DBUILDING_LIBTEST
+libtest_libtest_la_CPPFLAGS= ${AM_CPPFLAGS}
+libtest_libtest_la_CPPFLAGS+= ${NO_CONVERSION}
+libtest_libtest_la_CPPFLAGS+= $(PTHREAD_LIBS)
+libtest_libtest_la_CPPFLAGS+= -DBUILDING_LIBTEST
+libtest_libtest_la_CXXFLAGS= ${AM_CXXFLAGS}
+libtest_libtest_la_CXXFLAGS+= ${NO_CONVERSION}
+libtest_libtest_la_CXXFLAGS+= -DBUILDING_LIBTEST
+libtest_libtest_la_CXXFLAGS+= $(PTHREAD_CFLAGS)
 libtest_libtest_la_LIBADD=
+libtest_libtest_la_LIBADD+= $(PTHREAD_LIBS)
 
 LIBTEST_LDADD= libtest/libtest.la
 
 if HAVE_LIBMEMCACHED
-if BUILD_LIBMEMCACHEDUTIL
-LIBTEST_LDADD+= libmemcached/libmemcached.la
-LIBTEST_LDADD+= libmemcached/libmemcachedutil.la
-else
-LIBTEST_LDADD+= $(libmemcached_LIBS)
-endif
+libtest_libtest_la_LIBADD+= libmemcached/libmemcached.la
+libtest_libtest_la_LIBADD+= libmemcached/libmemcachedutil.la
 libtest_libtest_la_SOURCES+= libtest/memcached.cc
 endif
 
index 390efc57ce0250b367c996cba72a9ab5c146a148..4edf46f23ed58b88eeb5b78267c939c5bf336810 100644 (file)
@@ -8,10 +8,10 @@ dnl Macro: PANDORA_ENABLE_DTRACE
 dnl ---------------------------------------------------------------------------
 AC_DEFUN([PANDORA_ENABLE_DTRACE],[
   AC_ARG_ENABLE([dtrace],
-    [AS_HELP_STRING([--disable-dtrace],
-            [Build with support for the DTRACE. @<:@default=on@:>@])],
+    [AS_HELP_STRING([--enable-dtrace],
+            [Build with support for the DTRACE. @<:@default=no@:>@])],
     [ac_cv_enable_dtrace="$enableval"],
-    [ac_cv_enable_dtrace="yes"])
+    [ac_cv_enable_dtrace="no"])
 
   AS_IF([test "$ac_cv_enable_dtrace" = "yes"],[
     AC_CHECK_PROGS([DTRACE], [dtrace])
index ebeeb6205afc320f2d24e1062fb4f41e9742c44b..316da33cc4f3dce4d59afe0b42c5f1553c9836c4 100644 (file)
 
 TESTS_LDADDS= \
              libmemcached/libmemcached.la \
+             libmemcached/libmemcachedutil.la \
              libtest/libtest.la
 
 DEBUG_COMMAND= $(LIBTOOL) --mode=execute gdb
 
 PAHOLE_COMMAND= $(LIBTOOL) --mode=execute pahole
 
-if BUILD_LIBMEMCACHEDUTIL
-TESTS_LDADDS+= libmemcached/libmemcachedutil.la
-endif
-
 EXTRA_DIST+= \
             tests/cpp_example.cc \
             tests/output_plus.res
@@ -43,40 +40,55 @@ noinst_HEADERS+= \
 
 # Cycle should always run first
 tests_cycle_CFLAGS= $(AM_CFLAGS) $(NO_CONVERSION) $(NO_STRICT_ALIASING)
+tests_cycle_CXXFLAGS =  $(AM_CXXFLAGS) ${PTHREAD_CFLAGS}
 tests_cycle_SOURCES= tests/cycle.cc
 tests_cycle_DEPENDENCIES= $(TESTS_LDADDS)
 tests_cycle_LDADD= $(tests_cycle_DEPENDENCIES)
+tests_cycle_LDADD+= ${PTHREAD_LIBS}
 check_PROGRAMS+= tests/cycle
 noinst_PROGRAMS+= tests/cycle
 
+# Test internals
+tests_internals_SOURCES= tests/internals.cc
+tests_internals_SOURCES+= tests/string.cc
+tests_internals_CXXFLAGS =  $(AM_CXXFLAGS) ${PTHREAD_CFLAGS}
+tests_internals_DEPENDENCIES= libmemcachedinternal/libmemcachedinternal.la libtest/libtest.la  libmemcachedinternal/libmemcachedutilinternal.la
+tests_internals_LDADD= libmemcachedinternal/libmemcachedinternal.la
+tests_internals_LDADD+= ${PTHREAD_LIBS}
+tests_internals_LDADD+= libmemcachedinternal/libmemcachedutilinternal.la
+tests_internals_LDADD+= libtest/libtest.la
+check_PROGRAMS+= tests/internals
+noinst_PROGRAMS+= tests/internals
+
 
+tests_testapp_CXXFLAGS =  $(AM_CXXFLAGS) ${PTHREAD_CFLAGS}
 tests_testapp_CFLAGS= $(AM_CFLAGS) $(NO_CONVERSION) $(NO_STRICT_ALIASING)
 tests_testapp_SOURCES= \
                       tests/basic.cc \
                       tests/debug.cc \
                       tests/deprecated.cc \
                       tests/error_conditions.cc \
+                      tests/ketama.cc \
                       tests/mem_functions.cc \
                       tests/namespace.cc \
                       tests/parser.cc \
                       tests/pool.cc \
                       tests/print.cc \
                       tests/replication.cc \
-                      tests/string.cc \
                       tests/virtual_buckets.cc
 tests_testapp_SOURCES+= clients/generator.cc clients/execute.cc
-
 tests_testapp_DEPENDENCIES= \
-                           $(BUILT_SOURCES) \
-                           $(TESTS_LDADDS) \
+                           libmemcached/libmemcached.la \
+                           libtest/libtest.la
                            libhashkit/libhashkit.la \
-                           libmemcached/libmemcachedinternal.la
-
+                           libmemcached/libmemcachedutil.la
 tests_testapp_LDADD= \
                     $(LIBSASL) \
-                    $(TESTS_LDADDS) \
-                    libhashkit/libhashkit.la \
-                    libmemcached/libmemcachedinternal.la
+                    ${PTHREAD_LIBS} \
+                    libmemcached/libmemcached.la \
+                    libmemcached/libmemcachedutil.la \
+                    libtest/libtest.la \
+                    libhashkit/libhashkit.la
 check_PROGRAMS+= tests/testapp
 noinst_PROGRAMS+= tests/testapp
 
diff --git a/tests/internals.cc b/tests/internals.cc
new file mode 100644 (file)
index 0000000..8c28d31
--- /dev/null
@@ -0,0 +1,67 @@
+/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ * 
+ *  Libmemcached internals test
+ *
+ *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are
+ *  met:
+ *
+ *      * Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ *
+ *      * Redistributions in binary form must reproduce the above
+ *  copyright notice, this list of conditions and the following disclaimer
+ *  in the documentation and/or other materials provided with the
+ *  distribution.
+ *
+ *      * The names of its contributors may not be used to endorse or
+ *  promote products derived from this software without specific prior
+ *  written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <config.h>
+#include <libtest/test.hpp>
+
+using namespace libtest;
+
+#include "tests/string.h"
+
+/*
+  Test cases
+*/
+test_st string_tests[] ={
+  {"string static with null", false, string_static_null },
+  {"string alloc with null", false, string_alloc_null },
+  {"string alloc with 1K", false, string_alloc_with_size },
+  {"string alloc with malloc failure", false, string_alloc_with_size_toobig },
+  {"string append", false, string_alloc_append },
+  {"string append failure (too big)", false, string_alloc_append_toobig },
+  {"string_alloc_append_multiple", false, string_alloc_append_multiple },
+  {0, 0, 0}
+};
+
+
+collection_st collection[] ={
+  {"string", 0, 0, string_tests},
+  {0, 0, 0, 0}
+};
+
+void get_world(Framework *frame)
+{
+  frame->collections= collection;
+}
diff --git a/tests/ketama.cc b/tests/ketama.cc
new file mode 100644 (file)
index 0000000..8223734
--- /dev/null
@@ -0,0 +1,289 @@
+/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ * 
+ *  Libmemcached library
+ *
+ *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are
+ *  met:
+ *
+ *      * Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ *
+ *      * Redistributions in binary form must reproduce the above
+ *  copyright notice, this list of conditions and the following disclaimer
+ *  in the documentation and/or other materials provided with the
+ *  distribution.
+ *
+ *      * The names of its contributors may not be used to endorse or
+ *  promote products derived from this software without specific prior
+ *  written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <config.h>
+#include <libtest/test.hpp>
+
+#include <libmemcached/memcached.h>
+#include <libmemcached/server_instance.h>
+#include <libmemcached/continuum.hpp>
+
+#include <tests/ketama.h>
+#include <tests/ketama_test_cases.h>
+
+test_return_t ketama_compatibility_libmemcached(memcached_st *)
+{
+  memcached_st *memc= memcached_create(NULL);
+  test_true(memc);
+
+  test_compare(MEMCACHED_SUCCESS,
+               memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1));
+
+  test_compare(uint64_t(1), memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED));
+
+  test_compare(MEMCACHED_SUCCESS, memcached_behavior_set_distribution(memc, MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA));
+  test_compare(MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA, memcached_behavior_get_distribution(memc));
+
+  memcached_server_st *server_pool= memcached_servers_parse("10.0.1.1:11211 600,10.0.1.2:11211 300,10.0.1.3:11211 200,10.0.1.4:11211 350,10.0.1.5:11211 1000,10.0.1.6:11211 800,10.0.1.7:11211 950,10.0.1.8:11211 100");
+  memcached_server_push(memc, server_pool);
+
+  /* verify that the server list was parsed okay. */
+  test_compare(8U, memcached_server_count(memc));
+  test_strcmp(server_pool[0].hostname, "10.0.1.1");
+  test_compare(in_port_t(11211), server_pool[0].port);
+  test_compare(600U, server_pool[0].weight);
+  test_strcmp(server_pool[2].hostname, "10.0.1.3");
+  test_compare(in_port_t(11211), server_pool[2].port);
+  test_compare(200U, server_pool[2].weight);
+  test_strcmp(server_pool[7].hostname, "10.0.1.8");
+  test_compare(in_port_t(11211), server_pool[7].port);
+  test_compare(100U, server_pool[7].weight);
+
+  /* VDEAAAAA hashes to fffcd1b5, after the last continuum point, and lets
+   * us test the boundary wraparound.
+   */
+  test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->ketama.continuum[0].index);
+
+  /* verify the standard ketama set. */
+  for (uint32_t x= 0; x < 99; x++)
+  {
+    uint32_t server_idx = memcached_generate_hash(memc, ketama_test_cases[x].key, strlen(ketama_test_cases[x].key));
+    memcached_server_instance_st instance=
+      memcached_server_instance_by_position(memc, server_idx);
+    const char *hostname = memcached_server_name(instance);
+
+    test_strcmp(hostname, ketama_test_cases[x].server);
+  }
+
+  memcached_server_list_free(server_pool);
+  memcached_free(memc);
+
+  return TEST_SUCCESS;
+}
+
+test_return_t user_supplied_bug18(memcached_st *trash)
+{
+  memcached_return_t rc;
+  uint64_t value;
+  int x;
+  memcached_st *memc;
+
+  (void)trash;
+
+  memc= memcached_create(NULL);
+  test_true(memc);
+
+  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1);
+  test_compare(MEMCACHED_SUCCESS, rc);
+
+  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED);
+  test_true(value == 1);
+
+  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH, MEMCACHED_HASH_MD5);
+  test_compare(MEMCACHED_SUCCESS, rc);
+
+  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH);
+  test_true(value == MEMCACHED_HASH_MD5);
+
+  memcached_server_st *server_pool= memcached_servers_parse("10.0.1.1:11211 600,10.0.1.2:11211 300,10.0.1.3:11211 200,10.0.1.4:11211 350,10.0.1.5:11211 1000,10.0.1.6:11211 800,10.0.1.7:11211 950,10.0.1.8:11211 100");
+  memcached_server_push(memc, server_pool);
+
+  /* verify that the server list was parsed okay. */
+  test_true(memcached_server_count(memc) == 8);
+  test_strcmp(server_pool[0].hostname, "10.0.1.1");
+  test_true(server_pool[0].port == 11211);
+  test_true(server_pool[0].weight == 600);
+  test_strcmp(server_pool[2].hostname, "10.0.1.3");
+  test_true(server_pool[2].port == 11211);
+  test_true(server_pool[2].weight == 200);
+  test_strcmp(server_pool[7].hostname, "10.0.1.8");
+  test_true(server_pool[7].port == 11211);
+  test_true(server_pool[7].weight == 100);
+
+  /* VDEAAAAA hashes to fffcd1b5, after the last continuum point, and lets
+   * us test the boundary wraparound.
+   */
+  test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->ketama.continuum[0].index);
+
+  /* verify the standard ketama set. */
+  for (x= 0; x < 99; x++)
+  {
+    uint32_t server_idx = memcached_generate_hash(memc, ketama_test_cases[x].key, strlen(ketama_test_cases[x].key));
+
+    memcached_server_instance_st instance=
+      memcached_server_instance_by_position(memc, server_idx);
+
+    const char *hostname = memcached_server_name(instance);
+    test_strcmp(hostname, ketama_test_cases[x].server);
+  }
+
+  memcached_server_list_free(server_pool);
+  memcached_free(memc);
+
+  return TEST_SUCCESS;
+}
+
+test_return_t auto_eject_hosts(memcached_st *trash)
+{
+  (void) trash;
+  memcached_server_instance_st instance;
+
+  memcached_return_t rc;
+  memcached_st *memc= memcached_create(NULL);
+  test_true(memc);
+
+  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1);
+  test_compare(MEMCACHED_SUCCESS, rc);
+
+  uint64_t value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED);
+  test_true(value == 1);
+
+  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH, MEMCACHED_HASH_MD5);
+  test_compare(MEMCACHED_SUCCESS, rc);
+
+  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH);
+  test_true(value == MEMCACHED_HASH_MD5);
+
+    /* server should be removed when in delay */
+  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS, 1);
+  test_compare(MEMCACHED_SUCCESS, rc);
+
+  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS);
+  test_true(value == 1);
+
+  memcached_server_st *server_pool;
+  server_pool = memcached_servers_parse("10.0.1.1:11211 600,10.0.1.2:11211 300,10.0.1.3:11211 200,10.0.1.4:11211 350,10.0.1.5:11211 1000,10.0.1.6:11211 800,10.0.1.7:11211 950,10.0.1.8:11211 100");
+  memcached_server_push(memc, server_pool);
+
+  /* verify that the server list was parsed okay. */
+  test_true(memcached_server_count(memc) == 8);
+  test_strcmp(server_pool[0].hostname, "10.0.1.1");
+  test_true(server_pool[0].port == 11211);
+  test_true(server_pool[0].weight == 600);
+  test_strcmp(server_pool[2].hostname, "10.0.1.3");
+  test_true(server_pool[2].port == 11211);
+  test_true(server_pool[2].weight == 200);
+  test_strcmp(server_pool[7].hostname, "10.0.1.8");
+  test_true(server_pool[7].port == 11211);
+  test_true(server_pool[7].weight == 100);
+
+  instance= memcached_server_instance_by_position(memc, 2);
+  ((memcached_server_write_instance_st)instance)->next_retry = time(NULL) + 15;
+  memc->ketama.next_distribution_rebuild= time(NULL) - 1;
+
+  /*
+    This would not work if there were only two hosts.
+  */
+  for (size_t x= 0; x < 99; x++)
+  {
+    memcached_autoeject(memc);
+    uint32_t server_idx= memcached_generate_hash(memc, ketama_test_cases[x].key, strlen(ketama_test_cases[x].key));
+    test_true(server_idx != 2);
+  }
+
+  /* and re-added when it's back. */
+  ((memcached_server_write_instance_st)instance)->next_retry = time(NULL) - 1;
+  memc->ketama.next_distribution_rebuild= time(NULL) - 1;
+  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION,
+                         memc->distribution);
+  for (size_t x= 0; x < 99; x++)
+  {
+    uint32_t server_idx = memcached_generate_hash(memc, ketama_test_cases[x].key, strlen(ketama_test_cases[x].key));
+    // We re-use instance from above.
+    instance=
+      memcached_server_instance_by_position(memc, server_idx);
+    const char *hostname = memcached_server_name(instance);
+    test_strcmp(hostname, ketama_test_cases[x].server);
+  }
+
+  memcached_server_list_free(server_pool);
+  memcached_free(memc);
+
+  return TEST_SUCCESS;
+}
+
+test_return_t ketama_compatibility_spymemcached(memcached_st *)
+{
+  memcached_st *memc= memcached_create(NULL);
+  test_true(memc);
+
+  test_compare(MEMCACHED_SUCCESS,
+               memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1));
+
+  test_compare(UINT64_C(1), memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED));
+
+  test_compare(MEMCACHED_SUCCESS, memcached_behavior_set_distribution(memc, MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY));
+  test_compare(MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY, memcached_behavior_get_distribution(memc));
+
+  memcached_server_st *server_pool= memcached_servers_parse("10.0.1.1:11211 600,10.0.1.2:11211 300,10.0.1.3:11211 200,10.0.1.4:11211 350,10.0.1.5:11211 1000,10.0.1.6:11211 800,10.0.1.7:11211 950,10.0.1.8:11211 100");
+  test_true(server_pool);
+  memcached_server_push(memc, server_pool);
+
+  /* verify that the server list was parsed okay. */
+  test_compare(8U, memcached_server_count(memc));
+  test_strcmp(server_pool[0].hostname, "10.0.1.1");
+  test_compare(in_port_t(11211), server_pool[0].port);
+  test_compare(600U, server_pool[0].weight);
+  test_strcmp(server_pool[2].hostname, "10.0.1.3");
+  test_compare(in_port_t(11211), server_pool[2].port);
+  test_compare(200U, server_pool[2].weight);
+  test_strcmp(server_pool[7].hostname, "10.0.1.8");
+  test_compare(in_port_t(11211), server_pool[7].port);
+  test_compare(100U, server_pool[7].weight);
+
+  /* VDEAAAAA hashes to fffcd1b5, after the last continuum point, and lets
+   * us test the boundary wraparound.
+   */
+  test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->ketama.continuum[0].index);
+
+  /* verify the standard ketama set. */
+  for (uint32_t x= 0; x < 99; x++)
+  {
+    uint32_t server_idx= memcached_generate_hash(memc, ketama_test_cases_spy[x].key, strlen(ketama_test_cases_spy[x].key));
+
+    memcached_server_instance_st instance=
+      memcached_server_instance_by_position(memc, server_idx);
+
+    const char *hostname= memcached_server_name(instance);
+
+    test_strcmp(hostname, ketama_test_cases_spy[x].server);
+  }
+
+  memcached_server_list_free(server_pool);
+  memcached_free(memc);
+
+  return TEST_SUCCESS;
+}
diff --git a/tests/ketama.h b/tests/ketama.h
new file mode 100644 (file)
index 0000000..2d9cbb9
--- /dev/null
@@ -0,0 +1,42 @@
+/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ * 
+ *  Libmemcached library
+ *
+ *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are
+ *  met:
+ *
+ *      * Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ *
+ *      * Redistributions in binary form must reproduce the above
+ *  copyright notice, this list of conditions and the following disclaimer
+ *  in the documentation and/or other materials provided with the
+ *  distribution.
+ *
+ *      * The names of its contributors may not be used to endorse or
+ *  promote products derived from this software without specific prior
+ *  written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#pragma once
+
+test_return_t auto_eject_hosts(memcached_st *);
+test_return_t ketama_compatibility_libmemcached(memcached_st *);
+test_return_t ketama_compatibility_spymemcached(memcached_st *);
+test_return_t user_supplied_bug18(memcached_st *);
index b01d1ab23cf43d5fcc935fea1a029063d16c9b36..49d1eaa51c2672fa51f481976926660e241bdc61 100644 (file)
@@ -6,8 +6,7 @@
  * the COPYING file in the parent directory for full text.
  */
 
-#ifndef TESTS_KETAMA_TEST_CASES_H
-#define TESTS_KETAMA_TEST_CASES_H
+#pragma once
 
 static struct {
     const char *key;
@@ -117,5 +116,3 @@ static struct {
 };
 
 #include "ketama_test_cases_spy.h"
-
-#endif
index b9c0a96eeba7dfaf0a7b459c850a210c94f00ca8..b587031ff2a31f24395cd47e6cf142ce1f8a0b28 100644 (file)
@@ -6,8 +6,7 @@
  * the COPYING file in the parent directory for full text.
  */
 
-#ifndef TESTS_KETAMA_TEST_CASES_SPY_H
-#define TESTS_KETAMA_TEST_CASES_SPY_H
+#pragma once
 
 static struct {
     const char *key;
@@ -115,4 +114,3 @@ static struct {
   { "\\MQ_XNT7L-", 1259349383UL, 1259509450UL, "10.0.1.5" },
   { "VD6D0]ba_\\", 3842502950UL, 3842588691UL, "10.0.1.7" },
 };
-#endif
index 835fc0c71b7fd3abc37b518294e7d16d3bc1509b..7418cc218ecaa7a45c02cd6c7c6eb2fbb359cc0d 100644 (file)
   Test cases
 */
 
-#define BUILDING_LIBMEMCACHED
-// !NEVER use common.h, always use memcached.h in your own apps
-#include <libmemcached/common.h>
+#include <libmemcached/memcached.h>
+#include <libmemcached/is.h>
+#include <libmemcached/server_instance.h>
+
+#include <libhashkit/hashkit.h>
 
 #include <cassert>
+#include <cerrno>
 #include <memory>
+#include <pthread.h>
 #include <signal.h>
 #include <sys/stat.h>
 #include <sys/time.h>
@@ -66,9 +70,9 @@
 #include <libtest/test.hpp>
 #include "tests/deprecated.h"
 #include "tests/parser.h"
+#include "tests/ketama.h"
 #include "tests/pool.h"
 #include "tests/namespace.h"
-#include "tests/string.h"
 #include "tests/replication.h"
 #include "tests/debug.h"
 #include "tests/basic.h"
 
 using namespace libtest;
 
-#ifdef HAVE_LIBMEMCACHEDUTIL
-#include <pthread.h>
-#include "libmemcached/memcached_util.h"
-#endif
+#include <libmemcached/memcached_util.h>
 
 #include "hash_results.h"
 
@@ -2931,69 +2932,6 @@ static test_return_t user_supplied_bug20(memcached_st *memc)
   return TEST_SUCCESS;
 }
 
-#include "ketama_test_cases.h"
-static test_return_t user_supplied_bug18(memcached_st *trash)
-{
-  memcached_return_t rc;
-  uint64_t value;
-  int x;
-  memcached_st *memc;
-
-  (void)trash;
-
-  memc= memcached_create(NULL);
-  test_true(memc);
-
-  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1);
-  test_compare(MEMCACHED_SUCCESS, rc);
-
-  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED);
-  test_true(value == 1);
-
-  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH, MEMCACHED_HASH_MD5);
-  test_compare(MEMCACHED_SUCCESS, rc);
-
-  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH);
-  test_true(value == MEMCACHED_HASH_MD5);
-
-  memcached_server_st *server_pool= memcached_servers_parse("10.0.1.1:11211 600,10.0.1.2:11211 300,10.0.1.3:11211 200,10.0.1.4:11211 350,10.0.1.5:11211 1000,10.0.1.6:11211 800,10.0.1.7:11211 950,10.0.1.8:11211 100");
-  memcached_server_push(memc, server_pool);
-
-  /* verify that the server list was parsed okay. */
-  test_true(memcached_server_count(memc) == 8);
-  test_strcmp(server_pool[0].hostname, "10.0.1.1");
-  test_true(server_pool[0].port == 11211);
-  test_true(server_pool[0].weight == 600);
-  test_strcmp(server_pool[2].hostname, "10.0.1.3");
-  test_true(server_pool[2].port == 11211);
-  test_true(server_pool[2].weight == 200);
-  test_strcmp(server_pool[7].hostname, "10.0.1.8");
-  test_true(server_pool[7].port == 11211);
-  test_true(server_pool[7].weight == 100);
-
-  /* VDEAAAAA hashes to fffcd1b5, after the last continuum point, and lets
-   * us test the boundary wraparound.
-   */
-  test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->ketama.continuum[0].index);
-
-  /* verify the standard ketama set. */
-  for (x= 0; x < 99; x++)
-  {
-    uint32_t server_idx = memcached_generate_hash(memc, ketama_test_cases[x].key, strlen(ketama_test_cases[x].key));
-
-    memcached_server_instance_st instance=
-      memcached_server_instance_by_position(memc, server_idx);
-
-    const char *hostname = memcached_server_name(instance);
-    test_strcmp(hostname, ketama_test_cases[x].server);
-  }
-
-  memcached_server_list_free(server_pool);
-  memcached_free(memc);
-
-  return TEST_SUCCESS;
-}
-
 /* Large mget() of missing keys with binary proto
  *
  * If many binary quiet commands (such as getq's in an mget) fill the output
@@ -3098,85 +3036,6 @@ static test_return_t user_supplied_bug21(memcached_st *memc)
   return TEST_SUCCESS;
 }
 
-static test_return_t auto_eject_hosts(memcached_st *trash)
-{
-  (void) trash;
-  memcached_server_instance_st instance;
-
-  memcached_return_t rc;
-  memcached_st *memc= memcached_create(NULL);
-  test_true(memc);
-
-  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1);
-  test_compare(MEMCACHED_SUCCESS, rc);
-
-  uint64_t value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED);
-  test_true(value == 1);
-
-  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH, MEMCACHED_HASH_MD5);
-  test_compare(MEMCACHED_SUCCESS, rc);
-
-  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH);
-  test_true(value == MEMCACHED_HASH_MD5);
-
-    /* server should be removed when in delay */
-  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS, 1);
-  test_compare(MEMCACHED_SUCCESS, rc);
-
-  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS);
-  test_true(value == 1);
-
-  memcached_server_st *server_pool;
-  server_pool = memcached_servers_parse("10.0.1.1:11211 600,10.0.1.2:11211 300,10.0.1.3:11211 200,10.0.1.4:11211 350,10.0.1.5:11211 1000,10.0.1.6:11211 800,10.0.1.7:11211 950,10.0.1.8:11211 100");
-  memcached_server_push(memc, server_pool);
-
-  /* verify that the server list was parsed okay. */
-  test_true(memcached_server_count(memc) == 8);
-  test_strcmp(server_pool[0].hostname, "10.0.1.1");
-  test_true(server_pool[0].port == 11211);
-  test_true(server_pool[0].weight == 600);
-  test_strcmp(server_pool[2].hostname, "10.0.1.3");
-  test_true(server_pool[2].port == 11211);
-  test_true(server_pool[2].weight == 200);
-  test_strcmp(server_pool[7].hostname, "10.0.1.8");
-  test_true(server_pool[7].port == 11211);
-  test_true(server_pool[7].weight == 100);
-
-  instance= memcached_server_instance_by_position(memc, 2);
-  ((memcached_server_write_instance_st)instance)->next_retry = time(NULL) + 15;
-  memc->ketama.next_distribution_rebuild= time(NULL) - 1;
-
-  /*
-    This would not work if there were only two hosts.
-  */
-  for (size_t x= 0; x < 99; x++)
-  {
-    memcached_autoeject(memc);
-    uint32_t server_idx= memcached_generate_hash(memc, ketama_test_cases[x].key, strlen(ketama_test_cases[x].key));
-    test_true(server_idx != 2);
-  }
-
-  /* and re-added when it's back. */
-  ((memcached_server_write_instance_st)instance)->next_retry = time(NULL) - 1;
-  memc->ketama.next_distribution_rebuild= time(NULL) - 1;
-  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION,
-                         memc->distribution);
-  for (size_t x= 0; x < 99; x++)
-  {
-    uint32_t server_idx = memcached_generate_hash(memc, ketama_test_cases[x].key, strlen(ketama_test_cases[x].key));
-    // We re-use instance from above.
-    instance=
-      memcached_server_instance_by_position(memc, server_idx);
-    const char *hostname = memcached_server_name(instance);
-    test_strcmp(hostname, ketama_test_cases[x].server);
-  }
-
-  memcached_server_list_free(server_pool);
-  memcached_free(memc);
-
-  return TEST_SUCCESS;
-}
-
 static test_return_t output_ketama_weighted_keys(memcached_st *trash)
 {
   (void) trash;
@@ -4951,110 +4810,6 @@ static test_return_t memcached_get_by_key_MEMCACHED_NOTFOUND(memcached_st *memc)
   return TEST_SUCCESS;
 }
 
-
-static test_return_t ketama_compatibility_libmemcached(memcached_st *)
-{
-  memcached_st *memc= memcached_create(NULL);
-  test_true(memc);
-
-  test_compare(MEMCACHED_SUCCESS,
-               memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1));
-
-  test_compare(uint64_t(1), memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED));
-
-  test_compare(MEMCACHED_SUCCESS, memcached_behavior_set_distribution(memc, MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA));
-  test_compare(MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA, memcached_behavior_get_distribution(memc));
-
-  memcached_server_st *server_pool= memcached_servers_parse("10.0.1.1:11211 600,10.0.1.2:11211 300,10.0.1.3:11211 200,10.0.1.4:11211 350,10.0.1.5:11211 1000,10.0.1.6:11211 800,10.0.1.7:11211 950,10.0.1.8:11211 100");
-  memcached_server_push(memc, server_pool);
-
-  /* verify that the server list was parsed okay. */
-  test_compare(8U, memcached_server_count(memc));
-  test_strcmp(server_pool[0].hostname, "10.0.1.1");
-  test_compare(in_port_t(11211), server_pool[0].port);
-  test_compare(600U, server_pool[0].weight);
-  test_strcmp(server_pool[2].hostname, "10.0.1.3");
-  test_compare(in_port_t(11211), server_pool[2].port);
-  test_compare(200U, server_pool[2].weight);
-  test_strcmp(server_pool[7].hostname, "10.0.1.8");
-  test_compare(in_port_t(11211), server_pool[7].port);
-  test_compare(100U, server_pool[7].weight);
-
-  /* VDEAAAAA hashes to fffcd1b5, after the last continuum point, and lets
-   * us test the boundary wraparound.
-   */
-  test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->ketama.continuum[0].index);
-
-  /* verify the standard ketama set. */
-  for (uint32_t x= 0; x < 99; x++)
-  {
-    uint32_t server_idx = memcached_generate_hash(memc, ketama_test_cases[x].key, strlen(ketama_test_cases[x].key));
-    memcached_server_instance_st instance=
-      memcached_server_instance_by_position(memc, server_idx);
-    const char *hostname = memcached_server_name(instance);
-
-    test_strcmp(hostname, ketama_test_cases[x].server);
-  }
-
-  memcached_server_list_free(server_pool);
-  memcached_free(memc);
-
-  return TEST_SUCCESS;
-}
-
-static test_return_t ketama_compatibility_spymemcached(memcached_st *)
-{
-  memcached_st *memc= memcached_create(NULL);
-  test_true(memc);
-
-  test_compare(MEMCACHED_SUCCESS,
-               memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1));
-
-  test_compare(UINT64_C(1), memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED));
-
-  test_compare(MEMCACHED_SUCCESS, memcached_behavior_set_distribution(memc, MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY));
-  test_compare(MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY, memcached_behavior_get_distribution(memc));
-
-  memcached_server_st *server_pool= memcached_servers_parse("10.0.1.1:11211 600,10.0.1.2:11211 300,10.0.1.3:11211 200,10.0.1.4:11211 350,10.0.1.5:11211 1000,10.0.1.6:11211 800,10.0.1.7:11211 950,10.0.1.8:11211 100");
-  test_true(server_pool);
-  memcached_server_push(memc, server_pool);
-
-  /* verify that the server list was parsed okay. */
-  test_compare(8U, memcached_server_count(memc));
-  test_strcmp(server_pool[0].hostname, "10.0.1.1");
-  test_compare(in_port_t(11211), server_pool[0].port);
-  test_compare(600U, server_pool[0].weight);
-  test_strcmp(server_pool[2].hostname, "10.0.1.3");
-  test_compare(in_port_t(11211), server_pool[2].port);
-  test_compare(200U, server_pool[2].weight);
-  test_strcmp(server_pool[7].hostname, "10.0.1.8");
-  test_compare(in_port_t(11211), server_pool[7].port);
-  test_compare(100U, server_pool[7].weight);
-
-  /* VDEAAAAA hashes to fffcd1b5, after the last continuum point, and lets
-   * us test the boundary wraparound.
-   */
-  test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->ketama.continuum[0].index);
-
-  /* verify the standard ketama set. */
-  for (uint32_t x= 0; x < 99; x++)
-  {
-    uint32_t server_idx= memcached_generate_hash(memc, ketama_test_cases_spy[x].key, strlen(ketama_test_cases_spy[x].key));
-
-    memcached_server_instance_st instance=
-      memcached_server_instance_by_position(memc, server_idx);
-
-    const char *hostname= memcached_server_name(instance);
-
-    test_strcmp(hostname, ketama_test_cases_spy[x].server);
-  }
-
-  memcached_server_list_free(server_pool);
-  memcached_free(memc);
-
-  return TEST_SUCCESS;
-}
-
 static test_return_t regression_bug_434484(memcached_st *memc)
 {
   test_return_t test_rc;
@@ -5979,7 +5734,7 @@ static void memcached_die(memcached_st* mc, memcached_return error, const char*
 {
   fprintf(stderr, "Iteration #%u: ", it);
 
-  if(error == MEMCACHED_ERRNO)
+  if (error == MEMCACHED_ERRNO)
   {
     fprintf(stderr, "system error %d from %s: %s\n",
             errno, what, strerror(errno));
@@ -6220,17 +5975,6 @@ test_st async_tests[] ={
   {0, 0, 0}
 };
 
-test_st string_tests[] ={
-  {"string static with null", false, (test_callback_fn*)string_static_null },
-  {"string alloc with null", false, (test_callback_fn*)string_alloc_null },
-  {"string alloc with 1K", false, (test_callback_fn*)string_alloc_with_size },
-  {"string alloc with malloc failure", false, (test_callback_fn*)string_alloc_with_size_toobig },
-  {"string append", false, (test_callback_fn*)string_alloc_append },
-  {"string append failure (too big)", false, (test_callback_fn*)string_alloc_append_toobig },
-  {"string_alloc_append_multiple", false, (test_callback_fn*)string_alloc_append_multiple },
-  {0, 0, (test_callback_fn*)0}
-};
-
 test_st memcached_server_get_last_disconnect_tests[] ={
   {"memcached_server_get_last_disconnect()", false, (test_callback_fn*)test_multiple_get_last_disconnect},
   {0, 0, (test_callback_fn*)0}
@@ -6496,7 +6240,6 @@ collection_st collection[] ={
   {"sasl_auth", (test_callback_fn*)pre_sasl, 0, sasl_auth_tests },
   {"sasl", (test_callback_fn*)pre_sasl, 0, tests },
   {"version_1_2_3", (test_callback_fn*)check_for_1_2_3, 0, version_1_2_3},
-  {"string", 0, 0, string_tests},
   {"result", 0, 0, result_tests},
   {"async", (test_callback_fn*)pre_nonblock, 0, async_tests},
   {"async(BINARY)", (test_callback_fn*)pre_nonblock_binary, 0, async_tests},
index b29a6fdcfb66f1c36397bc27706cf0aadf230728..2becbd925a49c36efc05a702ff7347a926e8c0c3 100644 (file)
@@ -343,7 +343,6 @@ test_return_t memcached_create_with_options_with_filename(memcached_st*)
   memcached_st *memc_ptr;
   memc_ptr= memcached(test_literal_param("--CONFIGURE-FILE=\"support/example.cnf\""));
   test_true_got(memc_ptr, "memcached() failed");
-  test_strcmp(SUPPORT_EXAMPLE_CNF, memcached_array_string(memc_ptr->configure.filename));
   memcached_free(memc_ptr);
 
   return TEST_SUCCESS;
index 6ffe6a3ff411a5206bb793830978f3ceac48868b..041390ee31fb2e6b8c181cdf20eb0f3b367a1979 100644 (file)
 // We let libmemcached/common.h define config since we are looking at
 // library internals.
 
-#define BUILDING_LIBMEMCACHED
+#include <config.h>
 
-#include <libmemcached/common.h>
+#include <libmemcached/memcached.h>
+#include <libmemcached/is.h>
 
 #include <libtest/test.hpp>
 
-#include <libmemcached/error.h>
 #include <tests/string.h>
 
-test_return_t string_static_null(memcached_st *memc)
+test_return_t string_static_null(void*)
 {
+  memcached_st *memc= memcached_create(NULL);
   memcached_string_st string;
-  memcached_string_st *string_ptr;
 
-  string_ptr= memcached_string_create(memc, &string, 0);
-  test_true(string.options.is_initialized == true);
+  memcached_string_st *string_ptr= memcached_string_create(memc, &string, 0);
+  test_true(string.options.is_initialized);
   test_true(string_ptr);
 
   /* The following two better be the same! */
-  test_true(memcached_is_allocated(string_ptr) == false);
-  test_true(memcached_is_allocated(&string) == false);
+  test_false(memcached_is_allocated(string_ptr));
+  test_false(memcached_is_allocated(&string));
   test_true(&string == string_ptr);
 
-  test_true(string.options.is_initialized == true);
-  test_true(memcached_is_initialized(&string) == true);
+  test_true(string.options.is_initialized);
+  test_true(memcached_is_initialized(&string));
   memcached_string_free(&string);
-  test_true(memcached_is_initialized(&string) == false);
+  test_false(memcached_is_initialized(&string));
+
+  memcached_free(memc);
 
   return TEST_SUCCESS;
 }
 
-test_return_t string_alloc_null(memcached_st *memc)
+test_return_t string_alloc_null(void*)
 {
-  memcached_string_st *string;
+  memcached_st *memc= memcached_create(NULL);
 
-  string= memcached_string_create(memc, NULL, 0);
+  memcached_string_st *string= memcached_string_create(memc, NULL, 0);
   test_true(string);
-  test_true(memcached_is_allocated(string) == true);
-  test_true(memcached_is_initialized(string) == true);
+  test_true(memcached_is_allocated(string));
+  test_true(memcached_is_initialized(string));
   memcached_string_free(string);
 
+  memcached_free(memc);
+
   return TEST_SUCCESS;
 }
 
-test_return_t string_alloc_with_size(memcached_st *memc)
+test_return_t string_alloc_with_size(void*)
 {
-  memcached_string_st *string;
-
-  string= memcached_string_create(memc, NULL, 1024);
+  memcached_st *memc= memcached_create(NULL);
+  memcached_string_st *string= memcached_string_create(memc, NULL, 1024);
   test_true(string);
-  test_true(memcached_is_allocated(string) == true);
-  test_true(memcached_is_initialized(string) == true);
+  test_true(memcached_is_allocated(string));
+  test_true(memcached_is_initialized(string));
   memcached_string_free(string);
 
+  memcached_free(memc);
+
   return TEST_SUCCESS;
 }
 
-test_return_t string_alloc_with_size_toobig(memcached_st *memc)
+test_return_t string_alloc_with_size_toobig(void*)
 {
-  memcached_string_st *string;
-
-  string= memcached_string_create(memc, NULL, SIZE_MAX);
-  test_true(string == NULL);
+  memcached_st *memc= memcached_create(NULL);
+  memcached_string_st *string= memcached_string_create(memc, NULL, SIZE_MAX);
+  test_zero(string);
+  memcached_free(memc);
 
   return TEST_SUCCESS;
 }
 
-test_return_t string_alloc_append(memcached_st *memc)
+test_return_t string_alloc_append(void*)
 {
-  unsigned int x;
-  char buffer[SMALL_STRING_LEN];
+  memcached_st *memc= memcached_create(NULL);
+
+  char buffer[BUFSIZ];
   memcached_string_st *string;
 
   /* Ring the bell! */
-  memset(buffer, 6, SMALL_STRING_LEN);
+  memset(buffer, 6, BUFSIZ);
 
   string= memcached_string_create(memc, NULL, 100);
   test_true(string);
-  test_true(memcached_is_allocated(string) == true);
-  test_true(memcached_is_initialized(string) == true);
+  test_true(memcached_is_allocated(string));
+  test_true(memcached_is_initialized(string));
 
-  for (x= 0; x < 1024; x++)
+  for (unsigned int x= 0; x < 1024; x++)
   {
     memcached_return_t rc;
-    rc= memcached_string_append(string, buffer, SMALL_STRING_LEN);
+    rc= memcached_string_append(string, buffer, BUFSIZ);
     test_true(rc == MEMCACHED_SUCCESS);
   }
-  test_true(memcached_is_allocated(string) == true);
+  test_true(memcached_is_allocated(string));
   memcached_string_free(string);
 
+  memcached_free(memc);
+
   return TEST_SUCCESS;
 }
 
-test_return_t string_alloc_append_toobig(memcached_st *memc)
+test_return_t string_alloc_append_toobig(void*)
 {
+  memcached_st *memc= memcached_create(NULL);
+
   memcached_return_t rc;
-  char buffer[SMALL_STRING_LEN];
+  char buffer[BUFSIZ];
   memcached_string_st *string;
 
   /* Ring the bell! */
@@ -142,33 +152,39 @@ test_return_t string_alloc_append_toobig(memcached_st *memc)
 
   string= memcached_string_create(memc, NULL, 100);
   test_true(string);
-  test_true(memcached_is_allocated(string) == true);
-  test_true(memcached_is_initialized(string) == true);
+  test_true(memcached_is_allocated(string));
+  test_true(memcached_is_initialized(string));
 
   for (unsigned int x= 0; x < 1024; x++)
   {
-    rc= memcached_string_append(string, buffer, SMALL_STRING_LEN);
+    rc= memcached_string_append(string, buffer, BUFSIZ);
     test_true(rc == MEMCACHED_SUCCESS);
   }
   rc= memcached_string_append(string, buffer, SIZE_MAX);
   test_true(rc == MEMCACHED_MEMORY_ALLOCATION_FAILURE);
-  test_true(memcached_is_allocated(string) == true);
+  test_true(memcached_is_allocated(string));
   memcached_string_free(string);
 
+  memcached_free(memc);
+
   return TEST_SUCCESS;
 }
 
-test_return_t string_alloc_append_multiple(memcached_st *memc)
+test_return_t string_alloc_append_multiple(void*)
 {
+  memcached_st *memc= memcached_create(NULL);
+
   memcached_string_st *error_string= memcached_string_create(memc, NULL, 1024);
-  memcached_string_append(error_string, memcached_literal_param("Error occured while parsing: "));
-  memcached_string_append(error_string, memcached_string_make_from_cstr("jog the strlen() method"));
-  memcached_string_append(error_string, memcached_literal_param(" ("));
+  memcached_string_append(error_string, test_literal_param("Error occured while parsing: "));
+  memcached_string_append(error_string, test_string_make_from_cstr("jog the strlen() method"));
+  memcached_string_append(error_string, test_literal_param(" ("));
 
-  memcached_string_append(error_string, memcached_string_make_from_cstr(memcached_strerror(NULL, MEMCACHED_SUCCESS)));
-  memcached_string_append(error_string, memcached_literal_param(")"));
+  memcached_string_append(error_string, test_string_make_from_cstr(memcached_strerror(NULL, MEMCACHED_SUCCESS)));
+  memcached_string_append(error_string, test_literal_param(")"));
 
   memcached_string_free(error_string);
 
+  memcached_free(memc);
+
   return TEST_SUCCESS;
 }
index ca1679cd2d94303a6fff88474cbf2eb03986f0f3..e8848fb9c8540555d425fb3135e2f9a8ed10cb9c 100644 (file)
@@ -42,25 +42,25 @@ extern "C" {
 #endif
 
 LIBTEST_INTERNAL_API
-test_return_t string_static_null(memcached_st *memc);
+test_return_t string_static_null(void *);
 
 LIBTEST_INTERNAL_API
-test_return_t string_alloc_null(memcached_st *memc);
+test_return_t string_alloc_null(void *);
 
 LIBTEST_INTERNAL_API
-test_return_t string_alloc_with_size(memcached_st *memc);
+test_return_t string_alloc_with_size(void *);
 
 LIBTEST_INTERNAL_API
-test_return_t string_alloc_with_size_toobig(memcached_st *memc);
+test_return_t string_alloc_with_size_toobig(void *);
 
 LIBTEST_INTERNAL_API
-test_return_t string_alloc_append(memcached_st *memc);
+test_return_t string_alloc_append(void *);
 
 LIBTEST_INTERNAL_API
-test_return_t string_alloc_append_toobig(memcached_st *memc);
+test_return_t string_alloc_append_toobig(void *);
 
 LIBTEST_INTERNAL_API
-test_return_t string_alloc_append_multiple(memcached_st *memc);
+test_return_t string_alloc_append_multiple(void *);
 
 #ifdef __cplusplus
 }