Skip to content

Commit

Permalink
Apply insertion sort while adding replica in cluster
Browse files Browse the repository at this point in the history
  • Loading branch information
hpatro committed Mar 16, 2024
1 parent 3c8d15f commit b7e8119
Showing 1 changed file with 18 additions and 5 deletions.
23 changes: 18 additions & 5 deletions src/cluster_legacy.c
Original file line number Diff line number Diff line change
Expand Up @@ -1470,15 +1470,28 @@ int clusterNodeRemoveSlave(clusterNode *master, clusterNode *slave) {
}

int clusterNodeAddSlave(clusterNode *master, clusterNode *slave) {
int j;
int j, pos = -1;

/* If it's already a slave, don't add it again. */
for (j = 0; j < master->numslaves; j++)
for (j = 0; j < master->numslaves; j++) {
if (master->slaves[j] == slave) return C_ERR;
master->slaves = zrealloc(master->slaves,
sizeof(clusterNode*)*(master->numslaves+1));
master->slaves[master->numslaves] = slave;
/* Find lexicographic order index for the slave. */
if (pos == -1 && strcasecmp(slave->name, master->slaves[j]->name) > 0) {
pos = j;
}
}
/* If no slave(s) are found or it's lexicographically smallest. */
if (pos == -1) pos = 0;

master->numslaves++;
master->slaves = zrealloc(master->slaves, sizeof(clusterNode*)*(master->numslaves));

/* Copy all remaining nodes to the right. */
int remaining_slaves = (master->numslaves - pos) - 1;
if (remaining_slaves > 0) {
memmove(master->slaves+(pos+1), master->slaves+pos, (sizeof(*master->slaves) * remaining_slaves));
}
master->slaves[pos] = slave;
master->flags |= CLUSTER_NODE_MIGRATE_TO;
return C_OK;
}
Expand Down

0 comments on commit b7e8119

Please sign in to comment.