Hi.
I'm testing memcached failover through a little script and I having a
unexpected return for get/set commands.
My *code *is as follow
$servers = array(
array("ip", 11211, 50),
array("sameip", 11213, 50),
);
$poolID = sha1(serialize($servers));
$mc = new Memcached( $poolID );
if ( count($mc->getServerList()) == 0 )
$mc->addServers($servers);
$mc->setOption( Memcached::OPT_COMPRESSION, TRUE );
$mc->setOption(Memcached::OPT_SERIALIZER, Memcached::SERIALIZER_IGBINARY );
//Mas performance en la serialización de objetos
$mc->setOption(Memcached::OPT_DISTRIBUTION,
Memcached::DISTRIBUTION_CONSISTENT ); //Mejora el sharding de MC
$mc->setOption( Memcached::OPT_LIBKETAMA_COMPATIBLE, TRUE );
$mc->setOption( Memcached::OPT_CONNECT_TIMEOUT, 50 );
$mc->setOption( Memcached::OPT_SEND_TIMEOUT, 50000 );
$mc->setOption( Memcached::OPT_RECV_TIMEOUT, 50000 );
$mc->setOption( Memcached::OPT_POLL_TIMEOUT, 50 );
$mc->setOption( Memcached::OPT_NO_BLOCK, TRUE );
$mc->setOption( Memcached::OPT_SERVER_FAILURE_LIMIT, 20 );
$mc->setOption( Memcached::OPT_RETRY_TIMEOUT, 360 );
for ( $i = 0; $i <= 100000; $i++ ) {
$key = sha1(microtime(TRUE) . rand(0, 9999));
$mc->set( $key, md5($key), 60 );
var_dump( $mc->getResultCode(), $mc->getResultMessage() );
if ($mc->getResultCode() == Memcached::RES_NOTSTORED) {
echo "\n no se pudo guardar\n";die;
}
var_dump( $mc->get($key, NULL, $cas) );
var_dump( $mc->getResultCode(), $mc->getResultMessage() );
echo "\n\n\n";
}
*Environment*:
1 server with 2 memcached daemons (just for test)
php 5.3.10
memcached (php library) 2.1.0
memcached 1.4.15
Session support and igbinary activated
Expected:
Success message always.
Returned:
When one server is marked as disabled php still trying to get/set data to
that server ...
Is not supposed to ignore the server until timeout has passed?