#include <ctime>
#include <sys/types.h>
-bool memcached_is_consistent_distribution(const memcached_st* memc)
+bool memcached_is_consistent_distribution(const Memcached* memc)
{
switch (memc->distribution)
{
We quit all connections so we can reset the sockets.
*/
-memcached_return_t memcached_behavior_set(memcached_st *ptr,
+memcached_return_t memcached_behavior_set(memcached_st *shell,
const memcached_behavior_t flag,
uint64_t data)
{
+ Memcached* ptr= memcached2Memcached(shell);
if (ptr == NULL)
{
return MEMCACHED_INVALID_ARGUMENTS;
case MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS:
ptr->flags.auto_eject_hosts= bool(data);
+ break;
case MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT:
if (data == 0)
ptr->server_failure_limit= uint32_t(data);
break;
+ case MEMCACHED_BEHAVIOR_SERVER_TIMEOUT_LIMIT:
+ ptr->server_timeout_limit= uint32_t(data);
+ break;
+
case MEMCACHED_BEHAVIOR_BINARY_PROTOCOL:
send_quit(ptr); // We need t shutdown all of the connections to make sure we do the correct protocol
if (data)
break;
case MEMCACHED_BEHAVIOR_RETRY_TIMEOUT:
- if (data == 0)
- {
- return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT,
- memcached_literal_param("MEMCACHED_BEHAVIOR_RETRY_TIMEOUT requires a value greater then zero."));
- }
ptr->retry_timeout= int32_t(data);
break;
return ptr->flags.auto_eject_hosts;
}
-uint64_t memcached_behavior_get(memcached_st *ptr,
+uint64_t memcached_behavior_get(memcached_st *shell,
const memcached_behavior_t flag)
{
+ Memcached* ptr= memcached2Memcached(shell);
if (ptr == NULL)
{
return MEMCACHED_INVALID_ARGUMENTS;
return hashkit_get_function(&ptr->hashkit);
case MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS:
+ return ptr->flags.auto_eject_hosts;
+
case MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT:
return ptr->server_failure_limit;
+ case MEMCACHED_BEHAVIOR_SERVER_TIMEOUT_LIMIT:
+ return ptr->server_timeout_limit;
+
case MEMCACHED_BEHAVIOR_SORT_HOSTS:
return ptr->flags.use_sort_hosts;
return (uint64_t) ptr->send_size;
}
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, 0);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, 0);
if (instance) // If we have an instance we test, otherwise we just set and pray
{
return 0;
}
- if (getsockopt(instance->fd, SOL_SOCKET, SO_SNDBUF, &sock_size, &sock_length) < 0)
+ if (getsockopt(instance->fd, SOL_SOCKET, SO_SNDBUF, (char*)&sock_size, &sock_length) < 0)
{
memcached_set_errno(*ptr, get_socket_errno(), MEMCACHED_AT);
return 0; /* Zero means error */
if (ptr->recv_size != -1) // If value is -1 then we are using the default
return (uint64_t) ptr->recv_size;
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, 0);
+ memcached_instance_st* instance= memcached_instance_fetch(ptr, 0);
/**
@note REFACTOR
return 0;
}
- if (getsockopt(instance->fd, SOL_SOCKET, SO_RCVBUF, &sock_size, &sock_length) < 0)
+ if (getsockopt(instance->fd, SOL_SOCKET, SO_RCVBUF, (char*)&sock_size, &sock_length) < 0)
{
memcached_set_errno(*ptr, get_socket_errno(), MEMCACHED_AT);
return 0; /* Zero means error */
case MEMCACHED_BEHAVIOR_MAX:
default:
- assert_msg(0, "Invalid behavior passed to memcached_behavior_set()");
+ assert_msg(0, "Invalid behavior passed to memcached_behavior_get()");
return 0;
}
}
-memcached_return_t memcached_behavior_set_distribution(memcached_st *ptr, memcached_server_distribution_t type)
+memcached_return_t memcached_behavior_set_distribution(memcached_st *shell, memcached_server_distribution_t type)
{
- switch (type)
+ Memcached* ptr= memcached2Memcached(shell);
+ if (ptr)
{
- case MEMCACHED_DISTRIBUTION_MODULA:
- break;
+ switch (type)
+ {
+ case MEMCACHED_DISTRIBUTION_MODULA:
+ break;
- case MEMCACHED_DISTRIBUTION_CONSISTENT:
- case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA:
- memcached_set_weighted_ketama(ptr, false);
- break;
+ case MEMCACHED_DISTRIBUTION_CONSISTENT:
+ case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA:
+ memcached_set_weighted_ketama(ptr, false);
+ break;
- case MEMCACHED_DISTRIBUTION_RANDOM:
- break;
+ case MEMCACHED_DISTRIBUTION_RANDOM:
+ break;
- case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY:
- break;
+ case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY:
+ break;
- case MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED:
- memcached_set_weighted_ketama(ptr, true);
- break;
+ case MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED:
+ memcached_set_weighted_ketama(ptr, true);
+ break;
- case MEMCACHED_DISTRIBUTION_VIRTUAL_BUCKET:
- 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"));
+ default:
+ case MEMCACHED_DISTRIBUTION_CONSISTENT_MAX:
+ return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT,
+ memcached_literal_param("Invalid memcached_server_distribution_t"));
+ }
+ ptr->distribution= type;
+
+ return run_distribution(ptr);
}
- ptr->distribution= type;
- return run_distribution(ptr);
+ return MEMCACHED_INVALID_ARGUMENTS;
}
-memcached_server_distribution_t memcached_behavior_get_distribution(memcached_st *ptr)
+memcached_server_distribution_t memcached_behavior_get_distribution(memcached_st *shell)
{
- return ptr->distribution;
+ Memcached* ptr= memcached2Memcached(shell);
+ if (ptr)
+ {
+ return ptr->distribution;
+ }
+
+ return MEMCACHED_DISTRIBUTION_CONSISTENT_MAX;
}
-memcached_return_t memcached_behavior_set_key_hash(memcached_st *ptr, memcached_hash_t type)
+memcached_return_t memcached_behavior_set_key_hash(memcached_st *shell, memcached_hash_t type)
{
- if (hashkit_success(hashkit_set_function(&ptr->hashkit, (hashkit_hash_algorithm_t)type)))
+ Memcached* ptr= memcached2Memcached(shell);
+ if (ptr)
{
- return MEMCACHED_SUCCESS;
+ if (hashkit_success(hashkit_set_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()"));
}
- return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT,
- memcached_literal_param("Invalid memcached_hash_t()"));
+ return MEMCACHED_INVALID_ARGUMENTS;
}
-memcached_hash_t memcached_behavior_get_key_hash(memcached_st *ptr)
+memcached_hash_t memcached_behavior_get_key_hash(memcached_st *shell)
{
- return (memcached_hash_t)hashkit_get_function(&ptr->hashkit);
+ Memcached* ptr= memcached2Memcached(shell);
+ if (ptr)
+ {
+ return (memcached_hash_t)hashkit_get_function(&ptr->hashkit);
+ }
+
+ return MEMCACHED_HASH_MAX;
}
-memcached_return_t memcached_behavior_set_distribution_hash(memcached_st *ptr, memcached_hash_t type)
+memcached_return_t memcached_behavior_set_distribution_hash(memcached_st *shell, memcached_hash_t type)
{
- if (hashkit_success(hashkit_set_distribution_function(&ptr->hashkit, (hashkit_hash_algorithm_t)type)))
+ Memcached* ptr= memcached2Memcached(shell);
+ if (ptr)
{
- return MEMCACHED_SUCCESS;
+ 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()"));
}
- return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT,
- memcached_literal_param("Invalid memcached_hash_t()"));
+ return MEMCACHED_INVALID_ARGUMENTS;
}
-memcached_hash_t memcached_behavior_get_distribution_hash(memcached_st *ptr)
+memcached_hash_t memcached_behavior_get_distribution_hash(memcached_st *shell)
{
- return (memcached_hash_t)hashkit_get_function(&ptr->hashkit);
+ Memcached* ptr= memcached2Memcached(shell);
+ if (ptr)
+ {
+ return (memcached_hash_t)hashkit_get_function(&ptr->hashkit);
+ }
+
+ return MEMCACHED_HASH_MAX;
}
const char *libmemcached_string_behavior(const memcached_behavior_t flag)
{
switch (flag)
{
+ case MEMCACHED_BEHAVIOR_SERVER_TIMEOUT_LIMIT: return "MEMCACHED_BEHAVIOR_SERVER_TIMEOUT_LIMIT";
case MEMCACHED_BEHAVIOR_NO_BLOCK: return "MEMCACHED_BEHAVIOR_NO_BLOCK";
case MEMCACHED_BEHAVIOR_TCP_NODELAY: return "MEMCACHED_BEHAVIOR_TCP_NODELAY";
case MEMCACHED_BEHAVIOR_HASH: return "MEMCACHED_BEHAVIOR_HASH";
}
}
-memcached_return_t memcached_bucket_set(memcached_st *self,
+memcached_return_t memcached_bucket_set(memcached_st *shell,
const uint32_t *host_map,
const uint32_t *forward_map,
const uint32_t buckets,
const uint32_t replicas)
{
+ Memcached* self= memcached2Memcached(shell);
memcached_return_t rc;
if (self == NULL)