Skip to content

Commit bf4f978

Browse files
committed
Merge pull request #42 from poison/master
Fixed getServerByKey function
2 parents 585d314 + 30d9031 commit bf4f978

File tree

2 files changed

+114
-7
lines changed

2 files changed

+114
-7
lines changed

memcached-api.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ class Memcached {
5353

5454
const OPT_RETRY_TIMEOUT;
5555

56+
const OPT_DEAD_TIMEOUT;
57+
5658
const OPT_SND_TIMEOUT;
5759

5860
const OPT_RCV_TIMEOUT;
@@ -257,6 +259,14 @@ public function getServerList( ) {}
257259

258260
public function getServerByKey( $server_key ) {}
259261

262+
public function getLastErrorMessage( ) {}
263+
264+
public function getLastErrorCode( ) {}
265+
266+
public function getLastErrorErrno( ) {}
267+
268+
public function getLastDisconnectedServer( ) {}
269+
260270
public function flush( $delay = 0 ) {}
261271

262272
public function getStats( ) {}

php_memcached.c

Lines changed: 104 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1965,7 +1965,7 @@ PHP_METHOD(Memcached, getServerByKey)
19651965
{
19661966
char *server_key;
19671967
int server_key_len;
1968-
memcached_server_st *server;
1968+
memcached_server_instance_st *server_instance;
19691969
memcached_return error;
19701970
MEMC_METHOD_INIT_VARS;
19711971

@@ -1981,16 +1981,16 @@ PHP_METHOD(Memcached, getServerByKey)
19811981
RETURN_FALSE;
19821982
}
19831983

1984-
server = memcached_server_by_key(m_obj->memc, server_key, server_key_len, &error);
1985-
if (server == NULL) {
1984+
server_instance = memcached_server_by_key(m_obj->memc, server_key, server_key_len, &error);
1985+
if (server_instance == NULL) {
19861986
php_memc_handle_error(i_obj, error TSRMLS_CC);
19871987
RETURN_FALSE;
19881988
}
19891989

19901990
array_init(return_value);
1991-
add_assoc_string(return_value, "host", server->hostname, 1);
1992-
add_assoc_long(return_value, "port", server->port);
1993-
add_assoc_long(return_value, "weight", server->weight);
1991+
add_assoc_string(return_value, "host", (char*) memcached_server_name(server_instance), 1);
1992+
add_assoc_long(return_value, "port", memcached_server_port(server_instance));
1993+
add_assoc_long(return_value, "weight", 0);
19941994
}
19951995
/* }}} */
19961996

@@ -2028,6 +2028,81 @@ PHP_METHOD(Memcached, quit)
20282028
}
20292029
/* }}} */
20302030

2031+
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX >= 0x00049000
2032+
/* {{{ Memcached::getLastErrorMessage()
2033+
Returns the last error message that occurred */
2034+
PHP_METHOD(Memcached, getLastErrorMessage)
2035+
{
2036+
MEMC_METHOD_INIT_VARS;
2037+
2038+
if (zend_parse_parameters_none() == FAILURE) {
2039+
return;
2040+
}
2041+
2042+
MEMC_METHOD_FETCH_OBJECT;
2043+
2044+
RETURN_STRING(memcached_last_error_message(m_obj->memc), 1);
2045+
}
2046+
/* }}} */
2047+
2048+
/* {{{ Memcached::getLastErrorCode()
2049+
Returns the last error code that occurred */
2050+
PHP_METHOD(Memcached, getLastErrorCode)
2051+
{
2052+
MEMC_METHOD_INIT_VARS;
2053+
2054+
if (zend_parse_parameters_none() == FAILURE) {
2055+
return;
2056+
}
2057+
2058+
MEMC_METHOD_FETCH_OBJECT;
2059+
2060+
RETURN_LONG(memcached_last_error(m_obj->memc));
2061+
}
2062+
/* }}} */
2063+
2064+
/* {{{ Memcached::getLastErrorErrno()
2065+
Returns the last error errno that occurred */
2066+
PHP_METHOD(Memcached, getLastErrorErrno)
2067+
{
2068+
MEMC_METHOD_INIT_VARS;
2069+
2070+
if (zend_parse_parameters_none() == FAILURE) {
2071+
return;
2072+
}
2073+
2074+
MEMC_METHOD_FETCH_OBJECT;
2075+
2076+
RETURN_LONG(memcached_last_error_errno(m_obj->memc));
2077+
}
2078+
/* }}} */
2079+
#endif
2080+
2081+
/* {{{ Memcached::getLastDisconnectedServer()
2082+
Returns the last disconnected server
2083+
Was added in 0.34 according to libmemcached's Changelog */
2084+
PHP_METHOD(Memcached, getLastDisconnectedServer)
2085+
{
2086+
memcached_server_instance_st *server_instance;
2087+
MEMC_METHOD_INIT_VARS;
2088+
2089+
if (zend_parse_parameters_none() == FAILURE) {
2090+
return;
2091+
}
2092+
2093+
MEMC_METHOD_FETCH_OBJECT;
2094+
2095+
server_instance = memcached_server_get_last_disconnect(m_obj->memc);
2096+
if (server_instance == NULL) {
2097+
RETURN_FALSE;
2098+
}
2099+
2100+
array_init(return_value);
2101+
add_assoc_string(return_value, "host", (char*) memcached_server_name(server_instance), 1);
2102+
add_assoc_long(return_value, "port", memcached_server_port(server_instance));
2103+
}
2104+
/* }}} */
2105+
20312106
/* {{{ Memcached::getStats()
20322107
Returns statistics for the memcache servers */
20332108
PHP_METHOD(Memcached, getStats)
@@ -2592,7 +2667,7 @@ static memcached_return php_memc_do_serverlist_callback(const memcached_st *ptr,
25922667

25932668
MAKE_STD_ZVAL(array);
25942669
array_init(array);
2595-
add_assoc_string(array, "host", memcached_server_name(instance), 1);
2670+
add_assoc_string(array, "host", (char*) memcached_server_name(instance), 1);
25962671
add_assoc_long(array, "port", memcached_server_port(instance));
25972672
/*
25982673
* API does not allow to get at this field.
@@ -3491,6 +3566,18 @@ ZEND_BEGIN_ARG_INFO(arginfo_getServerByKey, 0)
34913566
ZEND_ARG_INFO(0, server_key)
34923567
ZEND_END_ARG_INFO()
34933568

3569+
ZEND_BEGIN_ARG_INFO(arginfo_getLastErrorMessage, 0)
3570+
ZEND_END_ARG_INFO()
3571+
3572+
ZEND_BEGIN_ARG_INFO(arginfo_getLastErrorCode, 0)
3573+
ZEND_END_ARG_INFO()
3574+
3575+
ZEND_BEGIN_ARG_INFO(arginfo_getLastErrorErrno, 0)
3576+
ZEND_END_ARG_INFO()
3577+
3578+
ZEND_BEGIN_ARG_INFO(arginfo_getLastDisconnectedServer, 0)
3579+
ZEND_END_ARG_INFO()
3580+
34943581
ZEND_BEGIN_ARG_INFO(arginfo_getOption, 0)
34953582
ZEND_ARG_INFO(0, option)
34963583
ZEND_END_ARG_INFO()
@@ -3578,6 +3665,13 @@ static zend_function_entry memcached_class_methods[] = {
35783665
MEMC_ME(resetServerList, arginfo_resetServerList)
35793666
MEMC_ME(quit, arginfo_quit)
35803667

3668+
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX >= 0x00049000
3669+
MEMC_ME(getLastErrorMessage, arginfo_getLastErrorMessage)
3670+
MEMC_ME(getLastErrorCode, arginfo_getLastErrorCode)
3671+
MEMC_ME(getLastErrorErrno, arginfo_getLastErrorErrno)
3672+
#endif
3673+
MEMC_ME(getLastDisconnectedServer, arginfo_getLastDisconnectedServer)
3674+
35813675
MEMC_ME(getStats, arginfo_getStats)
35823676
MEMC_ME(getVersion, arginfo_getVersion)
35833677
MEMC_ME(getAllKeys, arginfo_getAllKeys)
@@ -3716,6 +3810,9 @@ static void php_memc_register_constants(INIT_FUNC_ARGS)
37163810
REGISTER_MEMC_CLASS_CONST_LONG(OPT_SOCKET_RECV_SIZE, MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE);
37173811
REGISTER_MEMC_CLASS_CONST_LONG(OPT_CONNECT_TIMEOUT, MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT);
37183812
REGISTER_MEMC_CLASS_CONST_LONG(OPT_RETRY_TIMEOUT, MEMCACHED_BEHAVIOR_RETRY_TIMEOUT);
3813+
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX >= 0x01000003
3814+
REGISTER_MEMC_CLASS_CONST_LONG(OPT_DEAD_TIMEOUT, MEMCACHED_BEHAVIOR_DEAD_TIMEOUT);
3815+
#endif
37193816
REGISTER_MEMC_CLASS_CONST_LONG(OPT_SEND_TIMEOUT, MEMCACHED_BEHAVIOR_SND_TIMEOUT);
37203817
REGISTER_MEMC_CLASS_CONST_LONG(OPT_RECV_TIMEOUT, MEMCACHED_BEHAVIOR_RCV_TIMEOUT);
37213818
REGISTER_MEMC_CLASS_CONST_LONG(OPT_POLL_TIMEOUT, MEMCACHED_BEHAVIOR_POLL_TIMEOUT);

0 commit comments

Comments
 (0)