X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fbehavior.c;h=2e2b99e4c151ae945f0bb4ace3e7cc486149285c;hb=481efe3c437e1d87e0fabb987982cc1df2b2c35d;hp=138e0f17c98613473b57302f2bb4336c7246e296;hpb=3dee67d04099cc5e2986ed94aa612f429f54d6fb;p=m6w6%2Flibmemcached diff --git a/libmemcached/behavior.c b/libmemcached/behavior.c index 138e0f17..2e2b99e4 100644 --- a/libmemcached/behavior.c +++ b/libmemcached/behavior.c @@ -94,20 +94,10 @@ memcached_return_t memcached_behavior_set(memcached_st *ptr, return memcached_behavior_set_distribution(ptr, (memcached_server_distribution_t)data); case MEMCACHED_BEHAVIOR_KETAMA: { - if (data) - { - (void)memcached_behavior_set_key_hash(ptr, MEMCACHED_HASH_MD5); - (void)memcached_behavior_set_distribution_hash(ptr, MEMCACHED_HASH_MD5); - (void)memcached_behavior_set_distribution(ptr, MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA); - } - else - { - (void)memcached_behavior_set_key_hash(ptr, MEMCACHED_HASH_DEFAULT); - (void)memcached_behavior_set_distribution_hash(ptr, MEMCACHED_HASH_DEFAULT); - (void)memcached_behavior_set_distribution(ptr, MEMCACHED_DISTRIBUTION_MODULA); - } + if (data) // Turn on + return memcached_behavior_set_distribution(ptr, MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA); - break; + return memcached_behavior_set_distribution(ptr, MEMCACHED_DISTRIBUTION_MODULA); } case MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED: { @@ -179,55 +169,12 @@ memcached_return_t memcached_behavior_set(memcached_st *ptr, break; case MEMCACHED_BEHAVIOR_CORK: { - memcached_server_write_instance_st instance; - bool action= set_flag(data); - - if (action == false) - { - ptr->flags.cork= set_flag(false); - return MEMCACHED_SUCCESS; - } - - instance= memcached_server_instance_fetch(ptr, 0); - if (! instance) - return MEMCACHED_NO_SERVERS; - - - /* We just try the first host, and if it is down we return zero */ - memcached_return_t rc; - rc= memcached_connect(instance); - if (rc != MEMCACHED_SUCCESS) - { - return rc; - } - - /* Now we test! */ - memcached_ternary_t enabled; - enabled= test_cork(instance, true); - - switch (enabled) - { - case MEM_FALSE: - return ptr->cached_errno ? MEMCACHED_ERRNO : MEMCACHED_FAILURE ; - case MEM_TRUE: - { - enabled= test_cork(instance, false); - - if (enabled == false) // Possible bug in OS? - { - memcached_quit_server(instance, false); // We should reset everything on this error. - return MEMCACHED_ERRNO; // Errno will be true because we will have already set it. - } - ptr->flags.cork= true; - ptr->flags.tcp_nodelay= true; - memcached_quit(ptr); // We go on and reset the connections. - } - break; - case MEM_NOT: - default: - return memcached_set_error_string(ptr, MEMCACHED_NOT_SUPPORTED, - memcached_string_with_size("MEMCACHED_BEHAVIOR_CORK is not supported on this platform.")); - } +#ifdef HAVE_MSG_MORE + break; +#else + return memcached_set_error_string(ptr, MEMCACHED_NOT_SUPPORTED, + memcached_string_with_size("MEMCACHED_BEHAVIOR_CORK is not supported on this platform.")); +#endif } break; case MEMCACHED_BEHAVIOR_LOAD_FROM_FILE: @@ -331,7 +278,7 @@ uint64_t memcached_behavior_get(memcached_st *ptr, if (getsockopt(instance->fd, SOL_SOCKET, SO_SNDBUF, &sock_size, &sock_length) < 0) { - ptr->cached_errno= errno; + memcached_set_errno(ptr, errno, NULL); return 0; /* Zero means error */ } } @@ -367,7 +314,7 @@ uint64_t memcached_behavior_get(memcached_st *ptr, if (getsockopt(instance->fd, SOL_SOCKET, SO_RCVBUF, &sock_size, &sock_length) < 0) { - ptr->cached_errno= errno; + memcached_set_errno(ptr, errno, NULL); return 0; /* Zero means error */ } @@ -387,7 +334,11 @@ uint64_t memcached_behavior_get(memcached_st *ptr, case MEMCACHED_BEHAVIOR_RANDOMIZE_REPLICA_READ: return ptr->flags.randomize_replica_read; case MEMCACHED_BEHAVIOR_CORK: - return ptr->flags.cork; +#ifdef HAVE_MSG_MORE + return true; +#else + return false; +#endif case MEMCACHED_BEHAVIOR_TCP_KEEPALIVE: return ptr->flags.tcp_keepalive; case MEMCACHED_BEHAVIOR_LOAD_FROM_FILE: