From 44f7afe28a6483c048155098d0606b968264b511 Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 11 Feb 2014 09:48:53 +0100 Subject: [PATCH] Cluster: always increment the configEpoch in SETNODE after import. Removed a stale conditional preventing the configEpoch from incrementing after the import in certain conditions. Since the master got a new slot it should always claim a new configuration. --- src/cluster.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/cluster.c b/src/cluster.c index 452ddf57..febd1888 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -3166,8 +3166,6 @@ void clusterCommand(redisClient *c) { if (n == myself && server.cluster->importing_slots_from[slot]) { - clusterNode *old_owner = - server.cluster->importing_slots_from[slot]; /* This slot was manually migrated, set this node configEpoch * to a new epoch so that the new version can be propagated * by the cluster. @@ -3175,11 +3173,9 @@ void clusterCommand(redisClient *c) { * FIXME: the new version should be agreed otherwise a race * is possible if while a manual resharding is in progress * the master is failed over by a slave. */ - if (old_owner->configEpoch > myself->configEpoch) { - server.cluster->currentEpoch++; - myself->configEpoch = server.cluster->currentEpoch; - clusterDoBeforeSleep(CLUSTER_TODO_FSYNC_CONFIG); - } + server.cluster->currentEpoch++; + myself->configEpoch = server.cluster->currentEpoch; + clusterDoBeforeSleep(CLUSTER_TODO_FSYNC_CONFIG); server.cluster->importing_slots_from[slot] = NULL; } clusterDelSlot(slot);