From b58796f5208b910f07ffc8e3b11c77e984dc4973 Mon Sep 17 00:00:00 2001 From: antirez Date: Mon, 11 Jan 2016 15:01:14 +0100 Subject: [PATCH] Cluster: CLUSTER BUMPEPOCH introduced to help redis-trib fix. Sometimes during "fixes" we have to setup a new configuration and assign slots to nodes. With BUMPEPOCH we can make sure the new configuration of the node will win if there are conflicting configurations (for example another node is *also* claiming the same slot because the cluster is totally messed up). --- src/cluster.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/cluster.c b/src/cluster.c index 2fe7db1b..362e0395 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -4022,6 +4022,13 @@ void clusterCommand(client *c) { } clusterDelSlot(slot); clusterAddSlot(n,slot); + } else if (!strcasecmp(c->argv[3]->ptr,"bumpepoch") && c->argc == 2) { + /* CLUSTER BUMPEPOCH */ + int retval = clusterBumpConfigEpochWithoutConsensus(); + sds reply = sdscatprintf(sdsempty(),"%s %llu\r\n", + (retval == C_OK) ? "BUMPED" : "STILL", + (unsigned long long) myself->configEpoch); + addReplySds(c,reply); } else { addReplyError(c, "Invalid CLUSTER SETSLOT action or number of arguments");