diff options
-rw-r--r-- | cluster_library.c | 30 | ||||
-rw-r--r-- | cluster_library.h | 4 | ||||
-rw-r--r-- | redis_cluster.c | 22 | ||||
-rw-r--r-- | redis_cluster.h | 2 |
4 files changed, 55 insertions, 3 deletions
diff --git a/cluster_library.c b/cluster_library.c index 67e8fc75..e4354fc3 100644 --- a/cluster_library.c +++ b/cluster_library.c @@ -1221,6 +1221,9 @@ PHPAPI int cluster_send_slot(redisCluster *c, short slot, char *cmd, return -1; } + // Update our reply slot + c->reply_slot = slot; + return 0; } @@ -1794,6 +1797,33 @@ PHPAPI int cluster_scan_resp(INTERNAL_FUNCTION_PARAMETERS, redisCluster *c, return SUCCESS; } +/* INFO response */ +PHPAPI void cluster_info_resp(INTERNAL_FUNCTION_PARAMETERS, redisCluster *c, + void *ctx) +{ + zval *z_result; + char *info, *p; + + // Read our bulk response + if((info = redis_sock_read_bulk_reply(SLOT_SOCK(c,c->reply_slot), + c->reply_len TSRMLS_CC))==NULL) + { + CLUSTER_RETURN_FALSE(c); + } + + /* Parse response, free memory */ + z_result = redis_parse_info_response(info); + efree(info); + + // Return our array + if(CLUSTER_IS_ATOMIC(c)) { + *return_value = *z_result; + efree(z_result); + } else { + add_next_index_zval(c->multi_resp, z_result); + } +} + /* MULTI BULK response loop where we might pull the next one */ PHPAPI zval *cluster_zval_mbulk_resp(INTERNAL_FUNCTION_PARAMETERS, redisCluster *c, int pull, mbulk_cb cb) diff --git a/cluster_library.h b/cluster_library.h index 1c916fac..9d5d3e72 100644 --- a/cluster_library.h +++ b/cluster_library.h @@ -414,6 +414,10 @@ PHPAPI void cluster_msetnx_resp(INTERNAL_FUNCTION_PARAMETERS, PHPAPI int cluster_scan_resp(INTERNAL_FUNCTION_PARAMETERS, redisCluster *c, REDIS_SCAN_TYPE type, long *it); +/* INFO response handler */ +PHPAPI void cluster_info_resp(INTERNAL_FUNCTION_PARAMETERS, + redisCluster *c, void *ctx); + /* MULTI BULK processing callbacks */ int mbulk_resp_loop(RedisSock *redis_sock, zval *z_result, long long count, void *ctx TSRMLS_DC); diff --git a/redis_cluster.c b/redis_cluster.c index 296c3785..00977abf 100644 --- a/redis_cluster.c +++ b/redis_cluster.c @@ -169,7 +169,7 @@ zend_function_entry redis_cluster_functions[] = { PHP_ME(RedisCluster, sscan, arginfo_kscan, ZEND_ACC_PUBLIC) PHP_ME(RedisCluster, zscan, arginfo_kscan, ZEND_ACC_PUBLIC) PHP_ME(RedisCluster, hscan, arginfo_kscan, ZEND_ACC_PUBLIC) - + PHP_ME(RedisCluster, getoption, NULL, ZEND_ACC_PUBLIC) PHP_ME(RedisCluster, setoption, NULL, ZEND_ACC_PUBLIC) @@ -191,6 +191,7 @@ zend_function_entry redis_cluster_functions[] = { PHP_ME(RedisCluster, dbsize, NULL, ZEND_ACC_PUBLIC) PHP_ME(RedisCluster, bgrewriteaof, NULL, ZEND_ACC_PUBLIC) PHP_ME(RedisCluster, lastsave, NULL, ZEND_ACC_PUBLIC) + PHP_ME(RedisCluster, info, NULL, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} }; @@ -2126,22 +2127,25 @@ PHP_METHOD(RedisCluster, scan) { Z_LVAL_P(z_it) = it; } +/* }}} */ /* {{{ proto RedisCluster::sscan(string key, long it [string pat, long cnt]) */ PHP_METHOD(RedisCluster, sscan) { cluster_kscan_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, TYPE_SSCAN); } +/* }}} */ /* {{{ proto RedisCluster::zscan(string key, long it [string pat, long cnt]) */ PHP_METHOD(RedisCluster, zscan) { cluster_kscan_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, TYPE_ZSCAN); } +/* }}} */ /* {{{ proto RedisCluster::hscan(string key, long it [string pat, long cnt]) */ PHP_METHOD(RedisCluster, hscan) { cluster_kscan_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, TYPE_HSCAN); } - +/* }}} */ /* {{{ proto RedisCluster::save(string key) * proto RedisCluster::save(string host, long port) */ @@ -2149,6 +2153,7 @@ PHP_METHOD(RedisCluster, save) { cluster_empty_node_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, "SAVE", TYPE_LINE, cluster_bool_resp); } +/* }}} */ /* {{{ proto RedisCluster::bgsave(string key) * proto RedisCluster::bgsave(string host, long port) */ @@ -2156,6 +2161,7 @@ PHP_METHOD(RedisCluster, bgsave) { cluster_empty_node_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, "BGSAVE", TYPE_LINE, cluster_bool_resp); } +/* }}} */ /* {{{ proto RedisCluster::flushdb(string key) * proto RedisCluster::flushdb(string host, long port) */ @@ -2163,6 +2169,7 @@ PHP_METHOD(RedisCluster, flushdb) { cluster_empty_node_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, "FLUSHDB", TYPE_LINE, cluster_bool_resp); } +/* }}} */ /* {{{ proto RedisCluster::flushall(string key) * proto RedisCluster::flushall(string host, long port) */ @@ -2170,6 +2177,7 @@ PHP_METHOD(RedisCluster, flushall) { cluster_empty_node_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, "FLUSHALL", TYPE_LINE, cluster_bool_resp); } +/* }}} */ /* {{{ proto RedisCluster::dbsize(string key) * proto RedisCluster::dbsize(string host, long port) */ @@ -2177,6 +2185,7 @@ PHP_METHOD(RedisCluster, dbsize) { cluster_empty_node_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, "DBSIZE", TYPE_LINE, cluster_bool_resp); } +/* }}} */ /* {{{ proto RedisCluster::bgrewriteaof(string key) * proto RedisCluster::bgrewriteaof(string host, long port) */ @@ -2184,6 +2193,7 @@ PHP_METHOD(RedisCluster, bgrewriteaof) { cluster_empty_node_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, "BGREWRITEAOF", TYPE_LINE, cluster_bool_resp); } +/* }}} */ /* {{{ proto RedisCluster::lastsave(string key) * proto RedisCluster::lastsave(string host, long port) */ @@ -2191,6 +2201,14 @@ PHP_METHOD(RedisCluster, lastsave) { cluster_empty_node_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, "LASTSAVE", TYPE_INT, cluster_long_resp); } +/* }}} */ +/* {{{ proto RedisCluster::info(string key) + * proto RedisCluster::info(string host, long port) */ +PHP_METHOD(RedisCluster, info) { + cluster_empty_node_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, "INFO", + TYPE_BULK, cluster_info_resp); +} +/* }}} */ /* vim: set tabstop=4 softtabstops=4 noexpandtab shiftwidth=4: */ diff --git a/redis_cluster.h b/redis_cluster.h index 5d8c9c9e..e0635101 100644 --- a/redis_cluster.h +++ b/redis_cluster.h @@ -222,7 +222,7 @@ PHP_METHOD(RedisCluster, unsubscribe); PHP_METHOD(RedisCluster, punsubscribe); PHP_METHOD(RedisCluster, eval); PHP_METHOD(RedisCluster, evalsha); -PHP_METHOD(RedisCluter, info); +PHP_METHOD(RedisCluster, info); /* SCAN and friends */ PHP_METHOD(RedisCluster, scan); |