X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Finstance.cc;h=53f74f79365ee5d5a48e11a3f78e1497232db8e7;hb=c8b9a1330aaf70eb9e820a3a48799c6baf606a4a;hp=50d6388ef884587da588532f6df46ba3b8a6f17f;hpb=0fc1c4c69b16e575361f6de5ba565aa3de96494f;p=awesomized%2Flibmemcached diff --git a/libmemcached/instance.cc b/libmemcached/instance.cc index 50d6388e..53f74f79 100644 --- a/libmemcached/instance.cc +++ b/libmemcached/instance.cc @@ -37,7 +37,7 @@ #include -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) @@ -54,6 +54,8 @@ static inline void _server_init(org::libmemcached::Instance* self, memcached_st 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; @@ -84,15 +86,14 @@ static inline void _server_init(org::libmemcached::Instance* self, memcached_st 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) { @@ -111,7 +112,7 @@ static org::libmemcached::Instance* _server_create(org::libmemcached::Instance* return self; } -void org::libmemcached::Instance::events(short arg) +void memcached_instance_st::events(short arg) { if ((_events | arg) == _events) { @@ -121,7 +122,7 @@ void org::libmemcached::Instance::events(short arg) _events|= arg; } -void org::libmemcached::Instance::revents(short arg) +void memcached_instance_st::revents(short arg) { if (arg) { @@ -132,8 +133,8 @@ void org::libmemcached::Instance::revents(short arg) _events&= short(~arg); } -org::libmemcached::Instance* __instance_create_with(memcached_st *memc, - org::libmemcached::Instance* self, +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, @@ -163,16 +164,11 @@ org::libmemcached::Instance* __instance_create_with(memcached_st *memc, 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); @@ -187,7 +183,7 @@ void __instance_free(org::libmemcached::Instance* self) } } -void memcached_instance_free(org::libmemcached::Instance* self) +void memcached_instance_free(memcached_instance_st* self) { if (self) { @@ -195,11 +191,12 @@ void memcached_instance_free(org::libmemcached::Instance* self) } } -memcached_return_t memcached_server_cursor(const memcached_st* memc, +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(memc))) { @@ -209,7 +206,7 @@ memcached_return_t memcached_server_cursor(const memcached_st* memc, size_t errors= 0; for (uint32_t x= 0; x < memcached_instance_list_count(memc); x++) { - org::libmemcached::Instance* instance= memcached_instance_by_position(memc, x); + memcached_instance_st* instance= memcached_instance_by_position(memc, x); for (uint32_t y= 0; y < number_of_callbacks; y++) { @@ -238,7 +235,7 @@ memcached_return_t memcached_server_execute(memcached_st *memc, bool some_errors= false;; for (uint32_t x= 0; x < memcached_instance_list_count(memc); x++) { - org::libmemcached::Instance* instance= memcached_instance_fetch(memc, x); + memcached_instance_st* instance= memcached_instance_fetch(memc, x); memcached_return_t rc= (*callback)(memc, instance, context); if (rc == MEMCACHED_INVALID_ARGUMENTS) @@ -255,11 +252,12 @@ memcached_return_t memcached_server_execute(memcached_st *memc, return MEMCACHED_SUCCESS; } -memcached_server_instance_st memcached_server_by_key(memcached_st *memc, +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) { @@ -287,7 +285,7 @@ memcached_server_instance_st memcached_server_by_key(memcached_st *memc, /* 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) @@ -295,15 +293,15 @@ static org::libmemcached::Instance* memcached_instance_clone(org::libmemcached:: 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) @@ -317,33 +315,48 @@ void set_last_disconnected_host(org::libmemcached::Instance* self) // 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; }