summaryrefslogtreecommitdiff
path: root/src/redis-cli.c
diff options
context:
space:
mode:
authorartix <artix2@gmail.com>2019-02-20 15:36:12 +0100
committerartix <artix2@gmail.com>2019-02-20 15:36:15 +0100
commit0f28754021a66f2fe77dee1dd712220a741dc203 (patch)
tree52199ef4fb293039ac12874e1d5e62c7ca8a85fd /src/redis-cli.c
parent35ffbead5c309ad90c130a885fce1e44613c7467 (diff)
downloadredis-0f28754021a66f2fe77dee1dd712220a741dc203.tar.gz
Cluster Manager: fix replica assigment anti-affinity (create)
Fix issue #5849
Diffstat (limited to 'src/redis-cli.c')
-rw-r--r--src/redis-cli.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/redis-cli.c b/src/redis-cli.c
index 93290e5ed..1203c2eff 100644
--- a/src/redis-cli.c
+++ b/src/redis-cli.c
@@ -4918,6 +4918,12 @@ static int clusterManagerCommandCreate(int argc, char **argv) {
cursor += slots_per_node;
}
+ /* Rotating the list sometimes helps to get better initial
+ * anti-affinity before the optimizer runs. */
+ clusterManagerNode *first_node = interleaved[0];
+ for (i = 0; i < (interleaved_len - 1); i++)
+ interleaved[i] = interleaved[i + 1];
+ interleaved[interleaved_len - 1] = first_node;
int assign_unused = 0, available_count = interleaved_len;
assign_replicas:
for (i = 0; i < masters_count; i++) {