mirror of
https://github.com/fluencelabs/redis
synced 2025-03-30 22:31:03 +00:00
Cluster: clusterHandleConfigEpochCollision() fixed.
New config epochs must always be obtained incrementing the currentEpoch, that is itself guaranteed to be >= the max configEpoch currently known to the node.
This commit is contained in:
parent
80d4c52cdf
commit
3cf6f1f54f
@ -1235,11 +1235,12 @@ void clusterHandleConfigEpochCollision(clusterNode *sender) {
|
|||||||
/* Don't act if the colliding node has a smaller Node ID. */
|
/* Don't act if the colliding node has a smaller Node ID. */
|
||||||
if (memcmp(sender->name,myself->name,REDIS_CLUSTER_NAMELEN) <= 0) return;
|
if (memcmp(sender->name,myself->name,REDIS_CLUSTER_NAMELEN) <= 0) return;
|
||||||
/* Get the next ID available at the best of this node knowledge. */
|
/* Get the next ID available at the best of this node knowledge. */
|
||||||
myself->configEpoch = clusterGetMaxEpoch()+1;
|
server.cluster->currentEpoch++;
|
||||||
|
myself->configEpoch = server.cluster->currentEpoch;
|
||||||
clusterSaveConfigOrDie(1);
|
clusterSaveConfigOrDie(1);
|
||||||
redisLog(REDIS_VERBOSE,
|
redisLog(REDIS_VERBOSE,
|
||||||
"WARNING: configEpoch collision with node %.40s."
|
"WARNING: configEpoch collision with node %.40s."
|
||||||
"Updating my configEpoch to %llu",
|
" Updating my configEpoch to %llu",
|
||||||
sender->name,
|
sender->name,
|
||||||
(unsigned long long) myself->configEpoch);
|
(unsigned long long) myself->configEpoch);
|
||||||
}
|
}
|
||||||
@ -3343,6 +3344,9 @@ void clusterCommand(redisClient *c) {
|
|||||||
server.cluster->currentEpoch++;
|
server.cluster->currentEpoch++;
|
||||||
myself->configEpoch = server.cluster->currentEpoch;
|
myself->configEpoch = server.cluster->currentEpoch;
|
||||||
clusterDoBeforeSleep(CLUSTER_TODO_FSYNC_CONFIG);
|
clusterDoBeforeSleep(CLUSTER_TODO_FSYNC_CONFIG);
|
||||||
|
redisLog(REDIS_WARNING,
|
||||||
|
"configEpoch set to %llu after importing slot %d",
|
||||||
|
(unsigned long long) myself->configEpoch, slot);
|
||||||
}
|
}
|
||||||
server.cluster->importing_slots_from[slot] = NULL;
|
server.cluster->importing_slots_from[slot] = NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user