X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fbehavior.cc;h=c91acc5d8099099699284034e80ad525f2855202;hb=536d248a75fb329a48f06157d2bd8cea2f06f903;hp=84e3aa58cba2138c31988860da7aa4f8fc025d86;hpb=d8e83ea0e65c69df828a622560bb636564bdb226;p=m6w6%2Flibmemcached diff --git a/libmemcached/behavior.cc b/libmemcached/behavior.cc index 84e3aa58..c91acc5d 100644 --- a/libmemcached/behavior.cc +++ b/libmemcached/behavior.cc @@ -162,13 +162,17 @@ memcached_return_t memcached_behavior_set(memcached_st *ptr, case MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED: { + if (bool(data) == false) + { + return memcached_behavior_set(ptr, MEMCACHED_BEHAVIOR_KETAMA, true); + } + (void)memcached_behavior_set_key_hash(ptr, MEMCACHED_HASH_MD5); (void)memcached_behavior_set_distribution_hash(ptr, MEMCACHED_HASH_MD5); - ptr->ketama.weighted= bool(data); /** @note We try to keep the same distribution going. This should be deprecated and rewritten. */ - return memcached_behavior_set_distribution(ptr, MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA); + return memcached_behavior_set_distribution(ptr, MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED); } case MEMCACHED_BEHAVIOR_HASH: @@ -213,6 +217,10 @@ memcached_return_t memcached_behavior_set(memcached_st *ptr, ptr->retry_timeout= int32_t(data); break; + case MEMCACHED_BEHAVIOR_DEAD_TIMEOUT: + ptr->dead_timeout= int32_t(data); + break; + case MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE: ptr->send_size= (int32_t)data; send_quit(ptr); @@ -283,7 +291,7 @@ bool _is_auto_eject_host(const memcached_st *ptr) uint64_t memcached_behavior_get(memcached_st *ptr, const memcached_behavior_t flag) { - if (not ptr) + if (ptr == NULL) { return MEMCACHED_INVALID_ARGUMENTS; } @@ -357,6 +365,9 @@ uint64_t memcached_behavior_get(memcached_st *ptr, case MEMCACHED_BEHAVIOR_RETRY_TIMEOUT: return (uint64_t)ptr->retry_timeout; + case MEMCACHED_BEHAVIOR_DEAD_TIMEOUT: + return uint64_t(ptr->dead_timeout); + case MEMCACHED_BEHAVIOR_SND_TIMEOUT: return (uint64_t)ptr->snd_timeout; @@ -480,23 +491,36 @@ uint64_t memcached_behavior_get(memcached_st *ptr, memcached_return_t memcached_behavior_set_distribution(memcached_st *ptr, memcached_server_distribution_t type) { - if (type < MEMCACHED_DISTRIBUTION_CONSISTENT_MAX) + switch (type) { - if (MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED) - { - ptr->ketama.weighted= true; - } - else - { - ptr->ketama.weighted= false; - } + case MEMCACHED_DISTRIBUTION_MODULA: + break; - ptr->distribution= type; - return run_distribution(ptr); + case MEMCACHED_DISTRIBUTION_CONSISTENT: + case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA: + ptr->ketama.weighted= false; + break; + + case MEMCACHED_DISTRIBUTION_RANDOM: + break; + + case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY: + break; + + case MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED: + ptr->ketama.weighted= true; + break; + + case MEMCACHED_DISTRIBUTION_VIRTUAL_BUCKET: + break; + + default: + case MEMCACHED_DISTRIBUTION_CONSISTENT_MAX: + return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, + memcached_literal_param("Invalid memcached_server_distribution_t")); } - return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, - memcached_literal_param("Invalid memcached_server_distribution_t")); + return run_distribution(ptr); } @@ -524,7 +548,9 @@ memcached_hash_t memcached_behavior_get_key_hash(memcached_st *ptr) memcached_return_t memcached_behavior_set_distribution_hash(memcached_st *ptr, memcached_hash_t type) { if (hashkit_success(hashkit_set_distribution_function(&ptr->hashkit, (hashkit_hash_algorithm_t)type))) + { return MEMCACHED_SUCCESS; + } return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, memcached_literal_param("Invalid memcached_hash_t()")); @@ -555,6 +581,7 @@ const char *libmemcached_string_behavior(const memcached_behavior_t flag) case MEMCACHED_BEHAVIOR_VERIFY_KEY: return "MEMCACHED_BEHAVIOR_VERIFY_KEY"; case MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT: return "MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT"; case MEMCACHED_BEHAVIOR_RETRY_TIMEOUT: return "MEMCACHED_BEHAVIOR_RETRY_TIMEOUT"; + case MEMCACHED_BEHAVIOR_DEAD_TIMEOUT: return "MEMCACHED_BEHAVIOR_DEAD_TIMEOUT"; case MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED: return "MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED"; case MEMCACHED_BEHAVIOR_KETAMA_HASH: return "MEMCACHED_BEHAVIOR_KETAMA_HASH"; case MEMCACHED_BEHAVIOR_BINARY_PROTOCOL: return "MEMCACHED_BEHAVIOR_BINARY_PROTOCOL";