From 9ea216e88d31ba62f89234361318a0accbbfe75a Mon Sep 17 00:00:00 2001 From: Brian Aker Date: Thu, 21 Jan 2010 17:16:04 -0800 Subject: [PATCH] More Cleanup --- libhashkit/algorithm.c | 4 +- libhashkit/algorithm.h | 2 +- libhashkit/include.am | 10 ++-- libhashkit/md5.c | 4 +- libmemcached/do.c | 11 +++++ libmemcached/do.h | 2 +- libmemcached/get.c | 8 +++ libmemcached/hash.c | 16 ++++++ libmemcached/hash.h | 4 ++ libmemcached/hosts.c | 99 ++++++-------------------------------- libmemcached/include.am | 7 +-- libmemcached/memcached.c | 14 ++++-- libmemcached/server.c | 35 ++++++++++++++ libmemcached/server_list.c | 58 ++++++++++++++++++++++ libmemcached/util/pool.h | 8 +-- tests/include.am | 10 ++-- 16 files changed, 181 insertions(+), 111 deletions(-) create mode 100644 libmemcached/server_list.c diff --git a/libhashkit/algorithm.c b/libhashkit/algorithm.c index 380950e9..e8f859e8 100644 --- a/libhashkit/algorithm.c +++ b/libhashkit/algorithm.c @@ -60,8 +60,8 @@ uint32_t libhashkit_md5(const char *key, size_t key_length) return hashkit_md5(key, key_length, NULL); } -void libhashkit_md5_signature(const unsigned char *key, uint32_t length, unsigned char *result) +void libhashkit_md5_signature(const unsigned char *key, size_t length, unsigned char *result) { - md5_signature(key, length, result); + md5_signature(key, (uint32_t)length, result); } diff --git a/libhashkit/algorithm.h b/libhashkit/algorithm.h index 9e005eaf..40ab98ae 100644 --- a/libhashkit/algorithm.h +++ b/libhashkit/algorithm.h @@ -83,7 +83,7 @@ HASHKIT_LOCAL uint32_t hashkit_md5(const char *key, size_t key_length, void *context); HASHKIT_API -void libhashkit_md5_signature(const unsigned char *key, uint32_t length, unsigned char *result); +void libhashkit_md5_signature(const unsigned char *key, size_t length, unsigned char *result); #ifdef __cplusplus } diff --git a/libhashkit/include.am b/libhashkit/include.am index 11287a7a..f0dfe754 100644 --- a/libhashkit/include.am +++ b/libhashkit/include.am @@ -44,17 +44,15 @@ libhashkit_libhashkit_la_SOURCES+= libhashkit/hsieh.c endif libhashkit_libhashkit_la_CFLAGS= \ - ${AM_CFLAGS} \ - -DBUILDING_HASHKIT + ${AM_CFLAGS} \ + -DBUILDING_HASHKIT libhashkit_libhashkit_la_LDFLAGS= \ $(LIBM) \ -version-info $(HASHKIT_LIBRARY_VERSION) -noinst_LTLIBRARIES+= \ - libhashkit/libhashkitinc.la +noinst_LTLIBRARIES+= libhashkit/libhashkitinc.la libhashkit_libhashkitinc_la_SOURCES= ${libhashkit_libhashkit_la_SOURCES} libhashkit_libhashkitinc_la_CFLAGS= ${libhashkit_libhashkit_la_CFLAGS} -libhashkit_libhashkitinc_la_LDFLAGS= ${libhashkit_libhashkit_la_LDFLAGS} - +libhashkit_libhashkitinc_la_LDFLAGS= $(LIBM) diff --git a/libhashkit/md5.c b/libhashkit/md5.c index a968548d..7371c6d1 100644 --- a/libhashkit/md5.c +++ b/libhashkit/md5.c @@ -169,8 +169,8 @@ static void MD5Update ( /* Update number of bits */ if ((context->count[0] += ((UINT4)inputLen << 3)) - < ((UINT4)inputLen << 3)) - context->count[1]++; + < ((UINT4)inputLen << 3)) + context->count[1]++; context->count[1] += ((UINT4)inputLen >> 29); partLen = 64 - idx; diff --git a/libmemcached/do.c b/libmemcached/do.c index 31d45840..d5a75484 100644 --- a/libmemcached/do.c +++ b/libmemcached/do.c @@ -1,3 +1,14 @@ +/* LibMemcached + * Copyright (C) 2006-2010 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + * + * Summary: + * + */ + #include "common.h" memcached_return_t memcached_do(memcached_server_st *ptr, const void *command, diff --git a/libmemcached/do.h b/libmemcached/do.h index 223ed832..d62cd489 100644 --- a/libmemcached/do.h +++ b/libmemcached/do.h @@ -1,5 +1,5 @@ /* LibMemcached - * Copyright (C) 2006-2009 Brian Aker + * Copyright (C) 2006-2010 Brian Aker * All rights reserved. * * Use and distribution licensed under the BSD license. See diff --git a/libmemcached/get.c b/libmemcached/get.c index 990f9bbf..ba4d4bc3 100644 --- a/libmemcached/get.c +++ b/libmemcached/get.c @@ -588,11 +588,19 @@ static memcached_return_t binary_mget_by_key(memcached_st *ptr, } if (is_master_key_set) + { for (size_t x= 0; x < number_of_keys; x++) + { hash[x]= master_server_key; + } + } else + { for (size_t x= 0; x < number_of_keys; x++) + { hash[x]= memcached_generate_hash(ptr, keys[x], key_length[x]); + } + } rc= replication_binary_mget(ptr, hash, dead_servers, keys, key_length, number_of_keys); diff --git a/libmemcached/hash.c b/libmemcached/hash.c index 392155c0..dbdcc7de 100644 --- a/libmemcached/hash.c +++ b/libmemcached/hash.c @@ -1,3 +1,14 @@ +/* LibMemcached + * Copyright (C) 2006-2010 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + * + * Summary: + * + */ + #include "common.h" @@ -107,3 +118,8 @@ uint32_t memcached_generate_hash(memcached_st *ptr, const char *key, size_t key_ return dispatch_host(ptr, hash); } + +hashkit_st *memcached_get_hashkit(memcached_st *ptr) +{ + return &ptr->hashkit; +} diff --git a/libmemcached/hash.h b/libmemcached/hash.h index d82372d8..40f1f565 100644 --- a/libmemcached/hash.h +++ b/libmemcached/hash.h @@ -20,9 +20,13 @@ extern "C" { LIBMEMCACHED_API uint32_t memcached_generate_hash_value(const char *key, size_t key_length, memcached_hash_t hash_algorithm); +LIBMEMCACHED_API +hashkit_st *memcached_get_hashkit(memcached_st *ptr); + LIBMEMCACHED_API uint32_t memcached_generate_hash(memcached_st *ptr, const char *key, size_t key_length); + #ifdef __cplusplus } #endif diff --git a/libmemcached/hosts.c b/libmemcached/hosts.c index 9d8870dc..b98a18e8 100644 --- a/libmemcached/hosts.c +++ b/libmemcached/hosts.c @@ -1,3 +1,14 @@ +/* LibMemcached + * Copyright (C) 2006-2010 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + * + * Summary: + * + */ + #include "common.h" #include @@ -63,7 +74,7 @@ memcached_return_t run_distribution(memcached_st *ptr) return MEMCACHED_SUCCESS; } -static uint32_t ketama_server_hash(const char *key, unsigned int key_length, uint32_t alignment) +static uint32_t ketama_server_hash(const char *key, size_t key_length, uint32_t alignment) { unsigned char results[16]; @@ -214,9 +225,9 @@ static memcached_return_t update_continuum(memcached_st *ptr) if (is_ketama_weighted) { - for (uint32_t x = 0; x < pointer_per_hash; x++) + for (uint32_t x= 0; x < pointer_per_hash; x++) { - value= ketama_server_hash(sort_host, (uint32_t) sort_host_length, x); + value= ketama_server_hash(sort_host, sort_host_length, x); ptr->continuum[continuum_index].index= host_index; ptr->continuum[continuum_index++].value= value; } @@ -260,7 +271,7 @@ static memcached_return_t update_continuum(memcached_st *ptr) { for (uint32_t x = 0; x < pointer_per_hash; x++) { - value= ketama_server_hash(sort_host, (uint32_t) sort_host_length, (int) x); + value= ketama_server_hash(sort_host, sort_host_length, x); ptr->continuum[continuum_index].index= host_index; ptr->continuum[continuum_index++].value= value; } @@ -428,83 +439,3 @@ static memcached_return_t server_add(memcached_st *ptr, const char *hostname, return run_distribution(ptr); } - -/** - @todo allow lists to query themselves even if they lack a root -*/ -memcached_return_t memcached_server_remove(memcached_server_st *st_ptr) -{ - uint32_t x, host_index; - memcached_st *root= (memcached_st *)st_ptr->root; - memcached_server_st *list; - - if (root == NULL) - return MEMCACHED_FAILURE; - - list= memcached_server_list(root); - - for (x= 0, host_index= 0; x < memcached_server_count(root); x++) - { - if (strncmp(list[x].hostname, st_ptr->hostname, MEMCACHED_MAX_HOST_LENGTH) != 0 || list[x].port != st_ptr->port) - { - if (host_index != x) - memcpy(list+host_index, list+x, sizeof(memcached_server_st)); - host_index++; - } - } - root->number_of_hosts= host_index; - - if (st_ptr->address_info) - { - freeaddrinfo(st_ptr->address_info); - st_ptr->address_info= NULL; - } - run_distribution(root); - - return MEMCACHED_SUCCESS; -} - -memcached_server_st *memcached_server_list_append(memcached_server_st *ptr, - const char *hostname, in_port_t port, - memcached_return_t *error) -{ - return memcached_server_list_append_with_weight(ptr, hostname, port, 0, error); -} - -memcached_server_st *memcached_server_list_append_with_weight(memcached_server_st *ptr, - const char *hostname, in_port_t port, - uint32_t weight, - memcached_return_t *error) -{ - unsigned int count; - memcached_server_instance_st *new_host_list; - - if (hostname == NULL || error == NULL) - return NULL; - - if (! port) - port= MEMCACHED_DEFAULT_PORT; - - /* Increment count for hosts */ - count= 1; - if (ptr != NULL) - { - count+= memcached_servers_count(ptr); - } - - new_host_list= (memcached_server_instance_st *)realloc(ptr, sizeof(memcached_server_instance_st) * count); - if (!new_host_list) - { - *error= MEMCACHED_MEMORY_ALLOCATION_FAILURE; - return NULL; - } - - /* TODO: Check return type */ - memcached_server_create_with(NULL, &new_host_list[count-1], hostname, port, weight, MEMCACHED_CONNECTION_TCP); - - /* Backwards compatibility hack */ - memcached_servers_set_count(new_host_list, count); - - *error= MEMCACHED_SUCCESS; - return new_host_list; -} diff --git a/libmemcached/include.am b/libmemcached/include.am index aa96d923..6dc3d705 100644 --- a/libmemcached/include.am +++ b/libmemcached/include.am @@ -74,9 +74,9 @@ libmemcached_libmemcachedcallbacks_la_SOURCES = libmemcached/callback.c # 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/string.c +noinst_LTLIBRARIES+= libmemcached/libmemcachedinternal.la +libmemcached_libmemcachedinternal_la_SOURCES= \ + libmemcached/string.c lib_LTLIBRARIES+= libmemcached/libmemcached.la libmemcached_libmemcached_la_CFLAGS= ${AM_CFLAGS} ${NO_CONVERSION} @@ -104,6 +104,7 @@ libmemcached_libmemcached_la_SOURCES = \ libmemcached/response.c \ libmemcached/result.c \ libmemcached/server.c \ + libmemcached/server_list.c \ libmemcached/stats.c \ libmemcached/storage.c \ libmemcached/strerror.c \ diff --git a/libmemcached/memcached.c b/libmemcached/memcached.c index 6df260c6..c0fee34d 100644 --- a/libmemcached/memcached.c +++ b/libmemcached/memcached.c @@ -1,6 +1,14 @@ -/* - Memcached library -*/ +/* LibMemcached + * Copyright (C) 2006-2010 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + * + * Summary: + * + */ + #include "common.h" static const memcached_st global_copy= { diff --git a/libmemcached/server.c b/libmemcached/server.c index bcc211f6..68e1ebaa 100644 --- a/libmemcached/server.c +++ b/libmemcached/server.c @@ -227,3 +227,38 @@ void memcached_server_list_free(memcached_server_st *ptr) { server_list_free(NULL, ptr); } + +/** + @todo allow lists to query themselves even if they lack a root +*/ +memcached_return_t memcached_server_remove(memcached_server_st *st_ptr) +{ + uint32_t x, host_index; + memcached_st *root= (memcached_st *)st_ptr->root; + memcached_server_st *list; + + if (root == NULL) + return MEMCACHED_FAILURE; + + list= memcached_server_list(root); + + for (x= 0, host_index= 0; x < memcached_server_count(root); x++) + { + if (strncmp(list[x].hostname, st_ptr->hostname, MEMCACHED_MAX_HOST_LENGTH) != 0 || list[x].port != st_ptr->port) + { + if (host_index != x) + memcpy(list+host_index, list+x, sizeof(memcached_server_st)); + host_index++; + } + } + root->number_of_hosts= host_index; + + if (st_ptr->address_info) + { + freeaddrinfo(st_ptr->address_info); + st_ptr->address_info= NULL; + } + run_distribution(root); + + return MEMCACHED_SUCCESS; +} diff --git a/libmemcached/server_list.c b/libmemcached/server_list.c new file mode 100644 index 00000000..f3750ea1 --- /dev/null +++ b/libmemcached/server_list.c @@ -0,0 +1,58 @@ +/* LibMemcached + * Copyright (C) 2006-2010 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + * + * Summary: + * + */ + + +#include "common.h" + +memcached_server_st *memcached_server_list_append_with_weight(memcached_server_st *ptr, + const char *hostname, in_port_t port, + uint32_t weight, + memcached_return_t *error) +{ + unsigned int count; + memcached_server_instance_st *new_host_list; + + if (hostname == NULL || error == NULL) + return NULL; + + if (! port) + port= MEMCACHED_DEFAULT_PORT; + + /* Increment count for hosts */ + count= 1; + if (ptr != NULL) + { + count+= memcached_servers_count(ptr); + } + + new_host_list= (memcached_server_instance_st *)realloc(ptr, sizeof(memcached_server_instance_st) * count); + if (!new_host_list) + { + *error= MEMCACHED_MEMORY_ALLOCATION_FAILURE; + return NULL; + } + + /* TODO: Check return type */ + memcached_server_create_with(NULL, &new_host_list[count-1], hostname, port, weight, MEMCACHED_CONNECTION_TCP); + + /* Backwards compatibility hack */ + memcached_servers_set_count(new_host_list, count); + + *error= MEMCACHED_SUCCESS; + return new_host_list; +} + +memcached_server_st *memcached_server_list_append(memcached_server_st *ptr, + const char *hostname, in_port_t port, + memcached_return_t *error) +{ + return memcached_server_list_append_with_weight(ptr, hostname, port, 0, error); +} diff --git a/libmemcached/util/pool.h b/libmemcached/util/pool.h index b6325f3e..f2e71a2a 100644 --- a/libmemcached/util/pool.h +++ b/libmemcached/util/pool.h @@ -10,8 +10,8 @@ */ -#ifndef MEMCACHED_POOL_H -#define MEMCACHED_POOL_H +#ifndef __LIMEMCACHED_UTIL_POOL_H__ +#define __LIMEMCACHED_UTIL_POOL_H__ #include @@ -45,7 +45,7 @@ memcached_return_t memcached_pool_behavior_get(memcached_pool_st *ptr, uint64_t *value); #ifdef __cplusplus -} +} // extern "C" #endif -#endif /* MEMCACHED_POOL_H */ +#endif /* __LIMEMCACHED_UTIL_POOL_H__ */ diff --git a/tests/include.am b/tests/include.am index f1d00ef0..73b88342 100644 --- a/tests/include.am +++ b/tests/include.am @@ -51,11 +51,11 @@ tests_libtest_la_SOURCES= tests/test.c tests_testapp_CFLAGS= $(AM_CFLAGS) $(NO_CONVERSION) $(NO_STRICT_ALIASING) tests_testapp_SOURCES= tests/mem_functions.c tests_testapp_LDADD= \ - clients/libgenexec.la \ - tests/libserver.la \ - tests/libtest.la \ - libmemcached/libmemcachedinternal.la \ - $(TESTS_LDADDS) + clients/libgenexec.la \ + tests/libserver.la \ + tests/libtest.la \ + libmemcached/libmemcachedinternal.la \ +$(TESTS_LDADDS) tests_testapp_DEPENDENCIES= $(tests_testapp_LDADD) tests_testplus_SOURCES= tests/plus.cpp -- 2.30.2