X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Finstance.cc;h=50d6388ef884587da588532f6df46ba3b8a6f17f;hb=2897ccfa82591bd17d02c344465c4a74e3b3dbae;hp=01c514f1f3155cd4f777f87e3bf23e4d11d96a18;hpb=e2688497603c56929e6dd2b4e6139dd85edcb0e0;p=awesomized%2Flibmemcached diff --git a/libmemcached/instance.cc b/libmemcached/instance.cc index 01c514f1..50d6388e 100644 --- a/libmemcached/instance.cc +++ b/libmemcached/instance.cc @@ -44,7 +44,9 @@ static inline void _server_init(org::libmemcached::Instance* self, memcached_st { self->options.is_shutting_down= false; self->options.is_dead= false; - self->number_of_hosts= 0; + self->options.ready= false; + self->_events= 0; + self->_revents= 0; self->cursor_active_= 0; self->port_= port; self->fd= INVALID_SOCKET; @@ -109,6 +111,27 @@ static org::libmemcached::Instance* _server_create(org::libmemcached::Instance* return self; } +void org::libmemcached::Instance::events(short arg) +{ + if ((_events | arg) == _events) + { + return; + } + + _events|= arg; +} + +void org::libmemcached::Instance::revents(short arg) +{ + if (arg) + { + options.ready= true; + } + + _revents= arg; + _events&= short(~arg); +} + org::libmemcached::Instance* __instance_create_with(memcached_st *memc, org::libmemcached::Instance* self, const memcached_string_t& hostname, @@ -137,11 +160,6 @@ org::libmemcached::Instance* __instance_create_with(memcached_st *memc, memcached_io_init_udp_header(self, 0); } - if (memc) - { - memcached_connect_try(self); - } - return self; } @@ -155,6 +173,7 @@ void __instance_free(org::libmemcached::Instance* self) self->address_info= NULL; self->address_info_next= NULL; } + assert(self->address_info_next == NULL); memcached_error_free(*self); @@ -170,52 +189,31 @@ void __instance_free(org::libmemcached::Instance* self) void memcached_instance_free(org::libmemcached::Instance* self) { - if (self == NULL) - { - return; - } - - __instance_free(self); -} - -/* - If we do not have a valid object to clone from, we toss an error. -*/ -memcached_server_st *memcached_instance_2_server(org::libmemcached::Instance* source) -{ - /* We just do a normal create if source is missing */ - if (source == NULL) + if (self) { - return NULL; + __instance_free(self); } - - memcached_string_t hostname= { memcached_string_make_from_cstr(source->hostname) }; - return __server_create_with(source->root, NULL, - hostname, - source->port(), source->weight, - source->type); - } -memcached_return_t memcached_server_cursor(const memcached_st *ptr, +memcached_return_t memcached_server_cursor(const memcached_st* memc, const memcached_server_fn *callback, void *context, uint32_t number_of_callbacks) { 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); + org::libmemcached::Instance* 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)) { @@ -228,7 +226,7 @@ memcached_return_t memcached_server_cursor(const memcached_st *ptr, 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) { @@ -238,11 +236,11 @@ memcached_return_t memcached_server_execute(memcached_st *ptr, } 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); + org::libmemcached::Instance* 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; @@ -257,7 +255,7 @@ memcached_return_t memcached_server_execute(memcached_st *ptr, return MEMCACHED_SUCCESS; } -memcached_server_instance_st memcached_server_by_key(memcached_st *ptr, +memcached_server_instance_st memcached_server_by_key(memcached_st *memc, const char *key, size_t key_length, memcached_return_t *error) @@ -270,20 +268,20 @@ memcached_server_instance_st memcached_server_by_key(memcached_st *ptr, 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); } /* @@ -308,57 +306,29 @@ static org::libmemcached::Instance* memcached_instance_clone(org::libmemcached:: void set_last_disconnected_host(org::libmemcached::Instance* self) { assert(self->root); - if (self->root == NULL) - { - return; - } - - if (memcached_server_get_last_disconnect(self->root) and - memcached_server_get_last_disconnect(self->root)->version == self->version) + if (self->root) { - return; - } + if (memcached_server_get_last_disconnect(self->root) and + memcached_server_get_last_disconnect(self->root)->version == self->version) + { + return; + } - // const_cast - memcached_st *root= (memcached_st *)self->root; + // const_cast + memcached_st *root= (memcached_st *)self->root; - memcached_instance_free((org::libmemcached::Instance*)(root->last_disconnected_server)); - root->last_disconnected_server= memcached_instance_clone(self); - ((org::libmemcached::Instance*)memcached_server_get_last_disconnect(root))->version= self->version; -} + memcached_instance_free((org::libmemcached::Instance*)(root->last_disconnected_server)); -memcached_server_instance_st memcached_server_get_last_disconnect(const memcached_st *self) -{ - WATCHPOINT_ASSERT(self); - if (self == NULL) - { - return 0; - } - - return (memcached_server_instance_st)self->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; -uint32_t memcached_instance_set_count(org::libmemcached::Instance* servers, uint32_t count) -{ - WATCHPOINT_ASSERT(servers); - if (servers == NULL) - { - return 0; + ((org::libmemcached::Instance*)memcached_server_get_last_disconnect(root))->version= self->version; } - - return servers->number_of_hosts= count; } -const char *memcached_instance_name(const memcached_server_instance_st self) -{ - WATCHPOINT_ASSERT(self); - if (self == NULL) - return NULL; - - return self->hostname; -} - -in_port_t memcached_instance_port(const memcached_server_instance_st self) +memcached_server_instance_st memcached_server_get_last_disconnect(const memcached_st *self) { WATCHPOINT_ASSERT(self); if (self == NULL) @@ -366,7 +336,7 @@ in_port_t memcached_instance_port(const memcached_server_instance_st self) return 0; } - return self->port(); + return (memcached_server_instance_st)self->last_disconnected_server; } void memcached_instance_next_retry(memcached_server_instance_st self, const time_t absolute_time) @@ -377,14 +347,3 @@ void memcached_instance_next_retry(memcached_server_instance_st self, const time ((org::libmemcached::Instance*)self)->next_retry= absolute_time; } } - -uint32_t memcached_instance_response_count(const org::libmemcached::Instance* self) -{ - WATCHPOINT_ASSERT(self); - if (self == NULL) - { - return 0; - } - - return self->cursor_active_; -}