_is_auto_eject_host() not causing run_distribution()
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
libmemcached |
New
|
Medium
|
Brian Aker |
Bug Description
we are using libmemcached-0.44 but I observed the same problem on
latest 0.50 as well.
We have a cluster of let say 10 memcaches. We have
MEMCACHED_
One of the memcashes went down and memcachd_get() returned
MEMCACHED_
died memcache. So, we called memcached_
keys to the other servers. (let me note, there is nothing written
about memcached_
returned MEMCACHED_
I discovered run_distributio
(_is_auto_
condition in _regen_
The only place where ptr->next_
inside run_distribution() which can not be called because of the
condition. So, my first proposal is:
void memcached_
{
if (_is_auto_
}
I'm not sure if the patch is correct. However, it still did not fix
all my problems. memcachd_get() was still returning
MEMCACHED_
@@ -134,6 +134,7 @@ static memcached_return_t
update_
{
if (list[host_
{
+ list[host_
}
Consider the server went up and next retry timeout occurred. Due to
code in memcached_
514 if (ptr->root-
ptr->server_
515 {
516 set_last_
517
518 // @todo fix this by fixing behavior to no longer make use of
519 // memcached_st
520 if (_is_auto_
521 {
522 run_distributio
523 }
524
525 return MEMCACHED_
526 }
run_distribution() is called but it does not set
server_
condition "ptr->server_
ptr->root-
was returned again and again.
So the server never got back.
summary: |
- consistent hashing broken + _is_auto_eject_host() not causing run_distribution() |
Changed in libmemcached: | |
assignee: | nobody → Brian Aker (brianaker) |
importance: | Undecided → Medium |