assert() enabled by default
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
libmemcached |
Fix Released
|
Low
|
Brian Aker |
Bug Description
Tested in libmemcached 0.53, but also apllied in 1.0.4 after check the source code.
assert is enabled by default, so any assert_msg will be a core dump.
If something bad with the connection(ie EHOSTUNREACH, ECONNRESET) when connect_poll, libmemecached will set errno. However it only cares ENOTCONN and ECONNREFUSED, other errors will be considered as MEMCACHED_ERRNO, which means "Programmer error".
function call route: memcached_
Please see the information below:
(gdb) p *instance-
$1 = {root = 0xfb4bf0, query_id = 16748106, next = 0x0, rc = MEMCACHED_ERRNO, local_errno = 113, size = 111, message = "SYSTEM ERROR(No route to host), host: 10.11.22.33:11212 -> ../libmemcached
backtrace:
#0 0x000000302af2e2ed in raise () from /lib64/
#1 0x000000302af2fa3e in abort () from /lib64/
#2 0x00000000007726bf in memcached_set_error (self=@0xfb9348, rc=MEMCACHED_ERRNO, at=0x7e6c20 "../libmemcache
at ../libmemcached
#3 0x000000000077411a in memcached_
at ../libmemcached
#4 0x0000000000773826 in memcached_
value_
#5 0x000000000077376d in memcached_get (ptr=0xfb4bf0, key=0x46206620 "Count:
error=
#6 ...
description: | updated |
Changed in libmemcached: | |
assignee: | nobody → Brian Aker (brianaker) |
summary: |
- core when SYSTEM ERROR(No route to host) EHOSTUNREACH + assert() enabled by default |
Changed in libmemcached: | |
status: | Confirmed → Fix Committed |
Changed in libmemcached: | |
status: | Fix Committed → Fix Released |
got struck by the same thing, brief scenario:
- working with membase backend
- membase restart
- call memcached_delete()
this leads to the following: ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ----- delete. cc:215" ) at libmemcached/ error.cc: 308 delete_ by_key (ptr=0x9beacf8, group_key=0x9bea5b4 "79169918414. turbo_2_ unlim_internet_ dpi", group_key_ length= 38, key=0x9bea5b4 "79169918414. turbo_2_ unlim_internet_ dpi", key_length=38, expiration=0) delete. cc:215 turbo_2_ unlim_internet_ dpi", key_length=38, expiration=0) at libmemcached/ delete. cc:44 :MemcachedConn: :z_del (this=0x9b773c0, key=@0xf7f5ef58) at backend/ memcached. cpp:1034 :ConnInterface: :del (this=0x9b773c0, key=@0xf7f5ef58, silent= Box::Backend: :ConnInterface: :BECS_NONE) at backend/ interface. cpp:170 .so.0 delete. cc:215" ) at libmemcached/ error.cc: 308 error_messages io.cc:447\ 000"... } ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- -----
-------
(gdb) bt
#0 0xffffe410 in __kernel_vsyscall ()
#1 0x00555df0 in raise () from /lib/libc.so.6
#2 0x00557701 in abort () from /lib/libc.so.6
#3 0x080e1289 in memcached_set_error (self=@0x9beacf8, rc=MEMCACHED_ERRNO, at=0x810043a "libmemcached/
#4 0x080e0050 in memcached_
at libmemcached/
#5 0x080e017e in memcached_delete (ptr=0x9beacf8, key=0x9bea5b4 "79169918414.
#6 0x08070975 in Box::Backend:
#7 0x080795e5 in Box::Backend:
...
#14 0x0067a5ab in start_thread () from /lib/libpthread
#15 0x005fecfe in clone () from /lib/libc.so.6
(gdb) f 3
#3 0x080e1289 in memcached_set_error (self=@0x9beacf8, rc=MEMCACHED_ERRNO, at=0x810043a "libmemcached/
warning: Source file is more recent than executable.
308 assert_msg(rc != MEMCACHED_ERRNO, "Programmer error, MEMCACHED_ERRNO was set to be returned to client");
(gdb) p *self->
$2 = {root = 0x9beacf8, query_id = 2, next = 0x0, rc = MEMCACHED_ERRNO, local_errno = 115, size = 104,
message = "(163491064) SYSTEM ERROR(Operation now in progress), host: 192.168.64.94:11211 -> libmemcached/
(gdb) bt
-------