assert() enabled by default

Bug #1015916 reported by allen lee
12
This bug affects 2 people
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_mget_by_key_real() -> memcached_connect() -> network_connect() -> connect_poll()

Please see the information below:

(gdb) p *instance->error_messages
$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-0.53-work/libmemcached/connect.cc:75

backtrace:

#0 0x000000302af2e2ed in raise () from /lib64/tls/libc.so.6
#1 0x000000302af2fa3e in abort () from /lib64/tls/libc.so.6
#2 0x00000000007726bf in memcached_set_error (self=@0xfb9348, rc=MEMCACHED_ERRNO, at=0x7e6c20 "../libmemcached-0.53-work/libmemcached/get.cc:235")
    at ../libmemcached-0.53-work/libmemcached/error.cc:246
#3 0x000000000077411a in memcached_mget_by_key_real (ptr=0xfb4bf0, group_key=0x0, group_key_length=0, keys=0x46206490, key_length=0x46206488, number_of_keys=1, mget_mode=false)
    at ../libmemcached-0.53-work/libmemcached/get.cc:310
#4 0x0000000000773826 in memcached_get_by_key (ptr=0xfb4bf0, group_key=0x0, group_key_length=0, key=0x46206620 "Count:<dsttype:1,dstid:625713147,mtype:1>", key_length=41,
    value_length=0x46206554, flags=0x46206558, error=0x4620655c) at ../libmemcached-0.53-work/libmemcached/get.cc:86
#5 0x000000000077376d in memcached_get (ptr=0xfb4bf0, key=0x46206620 "Count:<dsttype:1,dstid:625713147,mtype:1>", key_length=41, value_length=0x46206554, flags=0x46206558,
    error=0x4620655c) at ../libmemcached-0.53-work/libmemcached/get.cc:49
#6 ...

allen lee (allenlee-lz)
description: updated
Brian Aker (brianaker)
Changed in libmemcached:
assignee: nobody → Brian Aker (brianaker)
Revision history for this message
sinny (sinnydono) wrote :

got struck by the same thing, brief scenario:
 - working with membase backend
 - membase restart
 - call memcached_delete()

this leads to the following:
---------------------------------------------------------------------------------------------------------------------
(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/delete.cc:215") at libmemcached/error.cc:308
#4 0x080e0050 in memcached_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)
    at libmemcached/delete.cc:215
#5 0x080e017e in memcached_delete (ptr=0x9beacf8, key=0x9bea5b4 "79169918414.turbo_2_unlim_internet_dpi", key_length=38, expiration=0) at libmemcached/delete.cc:44
#6 0x08070975 in Box::Backend::MemcachedConn::z_del (this=0x9b773c0, key=@0xf7f5ef58) at backend/memcached.cpp:1034
#7 0x080795e5 in Box::Backend::ConnInterface::del (this=0x9b773c0, key=@0xf7f5ef58, silent=Box::Backend::ConnInterface::BECS_NONE) at backend/interface.cpp:170
...
#14 0x0067a5ab in start_thread () from /lib/libpthread.so.0
#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/delete.cc:215") at libmemcached/error.cc:308
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->error_messages
$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/io.cc:447\000"...}
(gdb) bt
---------------------------------------------------------------------------------------------------------------------

Revision history for this message
Brian Aker (brianaker) wrote :

This will be fixed in the next version. Somewhere in the history this got switched on "no" by default, it should be yes.

Changed in libmemcached:
milestone: none → 1.0.10
importance: Undecided → Low
status: New → Confirmed
Brian Aker (brianaker)
summary: - core when SYSTEM ERROR(No route to host) EHOSTUNREACH
+ assert() enabled by default
Brian Aker (brianaker)
Changed in libmemcached:
status: Confirmed → Fix Committed
Brian Aker (brianaker)
Changed in libmemcached:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.