From 17600dd131a1ad11af081d0345a4627613f83b9d Mon Sep 17 00:00:00 2001 From: michael-grunder Date: Tue, 4 Jun 2019 21:56:39 -0700 Subject: WIP: Enable pooling for cluster slave nodes. Connections are stashed via redis_sock_disconnect so if RedisCluster doesn't explicitly call that for slaves then pooling is never used for those connections. Addresses #1568 --- cluster_library.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'cluster_library.c') diff --git a/cluster_library.c b/cluster_library.c index 2e926963..564629b5 100644 --- a/cluster_library.c +++ b/cluster_library.c @@ -1256,11 +1256,19 @@ static int cluster_check_response(redisCluster *c, REDIS_REPLY_TYPE *reply_type /* Disconnect from each node we're connected to */ PHP_REDIS_API void cluster_disconnect(redisCluster *c, int force TSRMLS_DC) { - redisClusterNode *node; + redisClusterNode *node, *slave; ZEND_HASH_FOREACH_PTR(c->nodes, node) { if (node == NULL) continue; + + /* Disconnect from the master */ redis_sock_disconnect(node->sock, force TSRMLS_CC); + + /* We also want to disconnect any slave connections so they will be pooled + * in the event we are using persistent connections and connection pooling. */ + ZEND_HASH_FOREACH_PTR(node->slaves, slave) { + redis_sock_disconnect(slave->sock, force TSRMLS_CC); + } ZEND_HASH_FOREACH_END(); } ZEND_HASH_FOREACH_END(); } -- cgit v1.2.3