Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpredis/phpredis.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Adam <adamhoreamarius@gmail.com>2022-07-17 14:48:08 +0300
committerMichael Grunder <michael.grunder@gmail.com>2022-09-19 22:09:35 +0300
commitf2bfd723573d2099ec411812c5a096da7eea94ff (patch)
tree141f8ee4203bac700c5c8d6040d1510966d9f19b
parent130b5d0b8e18ccb8cd37630f9d54f958a556f8dc (diff)
Issue #2080: avoid registering the same replicas multiple times in case the master handles multiple slot ranges
-rw-r--r--cluster_library.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/cluster_library.c b/cluster_library.c
index b14b1ac4..f11c2dcb 100644
--- a/cluster_library.c
+++ b/cluster_library.c
@@ -709,25 +709,25 @@ static int cluster_map_slots(redisCluster *c, clusterReply *r) {
if ((pnode = zend_hash_str_find_ptr(c->nodes, key, klen)) == NULL) {
master = cluster_node_create(c, host, hlen, port, low, 0);
zend_hash_str_update_ptr(c->nodes, key, klen, master);
- } else {
- master = pnode;
- }
- // Attach slaves
- for (j = 3; j< r2->elements; j++) {
- r3 = r2->element[j];
- if (!VALIDATE_SLOTS_INNER(r3)) {
- return -1;
- }
+ // Attach slaves first time we encounter a given master in order to avoid regitering the slaves multiple times
+ for (j = 3; j< r2->elements; j++) {
+ r3 = r2->element[j];
+ if (!VALIDATE_SLOTS_INNER(r3)) {
+ return -1;
+ }
- // Skip slaves where the host is ""
- if (r3->element[0]->len == 0) continue;
+ // Skip slaves where the host is ""
+ if (r3->element[0]->len == 0) continue;
- // Attach this node to our slave
- slave = cluster_node_create(c, r3->element[0]->str,
- (int)r3->element[0]->len,
- (unsigned short)r3->element[1]->integer, low, 1);
- cluster_node_add_slave(master, slave);
+ // Attach this node to our slave
+ slave = cluster_node_create(c, r3->element[0]->str,
+ (int)r3->element[0]->len,
+ (unsigned short)r3->element[1]->integer, low, 1);
+ cluster_node_add_slave(master, slave);
+ }
+ } else {
+ master = pnode;
}
// Attach this node to each slot in the range