Skip to content

Memcached set failed when expiration time set #368

@oleksiiskrypka

Description

@oleksiiskrypka

Memcached every day throws a strange bug..

Code1:

$mc = new Memcached();
$mc->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$mc->addServer(API::MEMCHACHED_HOST, API::MEMCHACHED_PORT);

var_dump($mc->getResultCode(), $mc->getResultMessage()); 
echo "\n---------------\n";
var_dump($mc->set('807313365_lock', 1, time() + 60));
var_dump($mc->getResultCode(), $mc->getResultMessage());
echo "\n---------------\n";

var_dump($mc->get('807313365_lock'));
var_dump($mc->getResultCode(), $mc->getResultMessage());
int(0)
string(7) "SUCCESS"
---------------
bool(true)
int(0)
string(7) "SUCCESS"
---------------
bool(false)
int(16)
string(9) "NOT FOUND"

Code2:

$mc = new Memcached();
$mc->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$mc->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);
$mc->setOption(Memcached::OPT_SERVER_FAILURE_LIMIT, 3);
$mc->setOption(Memcached::OPT_RETRY_TIMEOUT, 1);
$mc->setOption(Memcached::OPT_NO_BLOCK, true);
$mc->setOption(Memcached::OPT_BUFFER_WRITES, true);
$mc->addServer(API::MEMCHACHED_HOST, API::MEMCHACHED_PORT);

var_dump($mc->getResultCode(), $mc->getResultMessage()); 
echo "\n---------------\n";
var_dump(time() + 60);
var_dump($mc->set('807313365_lock', 1, time() + 60));
var_dump($mc->getResultCode(), $mc->getResultMessage());
echo "\n---------------\n";
var_dump($mc->get('807313365_lock'));
var_dump($mc->getResultCode(), $mc->getResultMessage());
int(0)
string(7) "SUCCESS"
---------------
bool(true)
int(32)
string(13) "ACTION QUEUED"
---------------
bool(false)
int(16)
string(9) "NOT FOUND"

When I removed the expiration time, it worked again:

var_dump($mc->set('807313365_lock', 1));
var_dump($mc->getResultCode(), $mc->getResultMessage());
var_dump($mc->get('807313365_lock'));
var_dump($mc->getResultCode(), $mc->getResultMessage());
int(0)
string(7) "SUCCESS"
---------------
bool(true)
int(0)
string(7) "SUCCESS"
int(1)
int(0)
string(7) "SUCCESS"

Some info about memcached server:

> telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats
STAT pid 1175
STAT uptime 68219
STAT time 1505980019
STAT version 1.4.25 Ubuntu
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 42.544000
STAT rusage_system 222.392000
STAT curr_connections 6
STAT total_connections 80641
STAT connection_structures 15
STAT reserved_fds 20
STAT cmd_get 4668690
STAT cmd_set 101810
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 2158521
STAT get_misses 2510169
STAT delete_misses 18
STAT delete_hits 14858
STAT incr_misses 0
STAT incr_hits 17287
STAT decr_misses 0
STAT decr_hits 12153
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 389605219
STAT bytes_written 796249085
STAT limit_maxbytes 536870912
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT time_in_listen_disabled_us 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 120802
STAT curr_items 749
STAT total_items 107884
STAT expired_unfetched 1189
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 4142
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 6

> netstat -tap | grep memcached               
tcp        0      0 localhost:11211         *:*                     LISTEN      1175/memcached
tcp        0      0 localhost:11211         localhost:60056         ESTABLISHED 1175/memcached

After restarting the memcached, it works again normally.. And all threads works fine.

netstat -tap | grep memcached
tcp        0      0 localhost:11211         *:*                     LISTEN      5680/memcached
tcp        0      0 localhost:11211         localhost:34698         ESTABLISHED 5680/memcached
tcp        0      0 localhost:11211         localhost:34346         ESTABLISHED 5680/memcached
tcp        0      0 localhost:11211         localhost:34738         ESTABLISHED 5680/memcached

Help to understand and repare this error. I don`t want to make a temporary solution - daily reboot of the memcache server.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions