#include <libmemcached/common.h>
-static inline void _server_init(org::libmemcached::Instance* self, memcached_st *root,
+static inline void _server_init(memcached_instance_st* self, Memcached *root,
const memcached_string_t& hostname,
in_port_t port,
uint32_t weight, memcached_connection_t type)
{
self->options.is_shutting_down= false;
self->options.is_dead= false;
+ self->options.ready= false;
+ self->_events= 0;
+ self->_revents= 0;
self->cursor_active_= 0;
self->port_= port;
self->fd= INVALID_SOCKET;
self->request_id= 0;
self->server_failure_counter= 0;
self->server_failure_counter_query_id= 0;
+ self->server_timeout_counter= 0;
+ self->server_timeout_counter_query_id= 0;
self->weight= weight ? weight : 1; // 1 is the default weight value
self->io_wait_count.read= 0;
self->io_wait_count.write= 0;
self->version= UINT_MAX;
}
self->limit_maxbytes= 0;
- memcpy(self->hostname, hostname.c_str, hostname.size);
- self->hostname[hostname.size]= 0;
+ self->hostname(hostname);
}
-static org::libmemcached::Instance* _server_create(org::libmemcached::Instance* self, const memcached_st *memc)
+static memcached_instance_st* _server_create(memcached_instance_st* self, const memcached_st *memc)
{
if (self == NULL)
{
- self= libmemcached_xmalloc(memc, org::libmemcached::Instance);
+ self= libmemcached_xmalloc(memc, memcached_instance_st);
if (self == NULL)
{
return self;
}
-org::libmemcached::Instance* __instance_create_with(memcached_st *memc,
- org::libmemcached::Instance* self,
+void memcached_instance_st::events(short arg)
+{
+ if ((_events | arg) == _events)
+ {
+ return;
+ }
+
+ _events|= arg;
+}
+
+void memcached_instance_st::revents(short arg)
+{
+ if (arg)
+ {
+ options.ready= true;
+ }
+
+ _revents= arg;
+ _events&= short(~arg);
+}
+
+memcached_instance_st* __instance_create_with(memcached_st *memc,
+ memcached_instance_st* self,
const memcached_string_t& hostname,
const in_port_t port,
uint32_t weight,
memcached_io_init_udp_header(self, 0);
}
- if (memc)
- {
- memcached_connect_try(self);
- }
-
return self;
}
-void __instance_free(org::libmemcached::Instance* self)
+void __instance_free(memcached_instance_st* self)
{
memcached_quit_server(self, false);
- if (self->address_info)
- {
- freeaddrinfo(self->address_info);
- self->address_info= NULL;
- self->address_info_next= NULL;
- }
+ self->clear_addrinfo();
assert(self->address_info_next == NULL);
memcached_error_free(*self);
}
}
-void memcached_instance_free(org::libmemcached::Instance* self)
+void memcached_instance_free(memcached_instance_st* self)
{
if (self)
{
}
}
-memcached_return_t memcached_server_cursor(const memcached_st *ptr,
+memcached_return_t memcached_server_cursor(const memcached_st* shell,
const memcached_server_fn *callback,
void *context,
uint32_t number_of_callbacks)
{
+ const Memcached* memc= memcached2Memcached(shell);
memcached_return_t rc;
- if (memcached_failed(rc= initialize_const_query(ptr)))
+ if (memcached_failed(rc= initialize_const_query(memc)))
{
return rc;
}
size_t errors= 0;
- for (uint32_t x= 0; x < memcached_instance_list_count(ptr); x++)
+ for (uint32_t x= 0; x < memcached_instance_list_count(memc); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_by_position(ptr, x);
+ memcached_instance_st* instance= memcached_instance_by_position(memc, x);
for (uint32_t y= 0; y < number_of_callbacks; y++)
{
- memcached_return_t ret= (*callback[y])(ptr, instance, context);
+ memcached_return_t ret= (*callback[y])(memc, instance, context);
if (memcached_failed(ret))
{
return errors ? MEMCACHED_SOME_ERRORS : MEMCACHED_SUCCESS;
}
-memcached_return_t memcached_server_execute(memcached_st *ptr,
+memcached_return_t memcached_server_execute(memcached_st *memc,
memcached_server_execute_fn callback,
void *context)
{
}
bool some_errors= false;;
- for (uint32_t x= 0; x < memcached_instance_list_count(ptr); x++)
+ for (uint32_t x= 0; x < memcached_instance_list_count(memc); x++)
{
- org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, x);
+ memcached_instance_st* instance= memcached_instance_fetch(memc, x);
- memcached_return_t rc= (*callback)(ptr, instance, context);
+ memcached_return_t rc= (*callback)(memc, instance, context);
if (rc == MEMCACHED_INVALID_ARGUMENTS)
{
return rc;
return MEMCACHED_SUCCESS;
}
-memcached_server_instance_st memcached_server_by_key(memcached_st *ptr,
+const memcached_instance_st * memcached_server_by_key(memcached_st *shell,
const char *key,
size_t key_length,
memcached_return_t *error)
{
+ Memcached* memc= memcached2Memcached(shell);
memcached_return_t unused;
if (error == NULL)
{
memcached_return_t rc;
- if (memcached_failed(rc= initialize_const_query(ptr)))
+ if (memcached_failed(rc= initialize_const_query(memc)))
{
*error= rc;
return NULL;
}
- if (memcached_failed((memcached_key_test(*ptr, (const char **)&key, &key_length, 1))))
+ if (memcached_failed((memcached_key_test(*memc, (const char **)&key, &key_length, 1))))
{
- *error= memcached_last_error(ptr);
+ *error= memcached_last_error(memc);
return NULL;
}
- uint32_t server_key= memcached_generate_hash(ptr, key, key_length);
- return memcached_instance_by_position(ptr, server_key);
+ uint32_t server_key= memcached_generate_hash(memc, key, key_length);
+ return memcached_instance_by_position(memc, server_key);
}
/*
If we do not have a valid object to clone from, we toss an error.
*/
-static org::libmemcached::Instance* memcached_instance_clone(org::libmemcached::Instance* source)
+static memcached_instance_st* memcached_instance_clone(memcached_instance_st* source)
{
/* We just do a normal create if source is missing */
if (source == NULL)
return NULL;
}
- memcached_string_t hostname= { memcached_string_make_from_cstr(source->hostname) };
+ memcached_string_t hostname_= { memcached_string_make_from_cstr(source->hostname()) };
return __instance_create_with(source->root,
NULL,
- hostname,
+ hostname_,
source->port(), source->weight,
source->type);
}
-void set_last_disconnected_host(org::libmemcached::Instance* self)
+void set_last_disconnected_host(memcached_instance_st* self)
{
assert(self->root);
if (self->root)
// const_cast
memcached_st *root= (memcached_st *)self->root;
- memcached_instance_free((org::libmemcached::Instance*)(root->last_disconnected_server));
+ memcached_instance_free((memcached_instance_st*)(root->last_disconnected_server));
// We set is_parsing so that no lookup happens
root->state.is_parsing= true;
root->last_disconnected_server= memcached_instance_clone(self);
root->state.is_parsing= false;
- ((org::libmemcached::Instance*)memcached_server_get_last_disconnect(root))->version= self->version;
+ ((memcached_instance_st*)memcached_server_get_last_disconnect(root))->version= self->version;
}
}
-memcached_server_instance_st memcached_server_get_last_disconnect(const memcached_st *self)
+const memcached_instance_st * memcached_server_get_last_disconnect(const memcached_st *shell)
{
- WATCHPOINT_ASSERT(self);
- if (self == NULL)
+ const Memcached* self= memcached2Memcached(shell);
+ if (self)
{
- return 0;
+ return (const memcached_instance_st *)self->last_disconnected_server;
}
- return (memcached_server_instance_st)self->last_disconnected_server;
+ return 0;
}
-void memcached_instance_next_retry(memcached_server_instance_st self, const time_t absolute_time)
+void memcached_instance_next_retry(const memcached_instance_st * self, const time_t absolute_time)
{
WATCHPOINT_ASSERT(self);
if (self)
{
- ((org::libmemcached::Instance*)self)->next_retry= absolute_time;
+ ((memcached_instance_st*)self)->next_retry= absolute_time;
+ }
+}
+
+bool memcached_instance_st::valid() const
+{
+ if (fd == INVALID_SOCKET)
+ {
+ return false;
}
+
+ return true;
+}
+
+bool memcached_instance_st::is_shutting_down() const
+{
+ return options.is_shutting_down;
}