From 7cabc576a952e25c4f72781cdb135bf05cbf58f0 Mon Sep 17 00:00:00 2001 From: Harkrishn Patro Date: Wed, 29 May 2024 21:02:18 +0000 Subject: [PATCH] Avoid shard id update of replica if not matching with primary shard id Signed-off-by: Harkrishn Patro --- src/cluster_legacy.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cluster_legacy.c b/src/cluster_legacy.c index 0822429934..3381dd7d68 100644 --- a/src/cluster_legacy.c +++ b/src/cluster_legacy.c @@ -914,6 +914,12 @@ static void updateAnnouncedHumanNodename(clusterNode *node, char *new) { static void updateShardId(clusterNode *node, const char *shard_id) { + /* Shard id update of replica independently will corrupt the config file. */ + if (shard_id && nodeIsSlave(node) && memcmp(clusterNodeGetMaster(node)->shard_id, shard_id, CLUSTER_NAMELEN) != 0) { + serverLog(LL_NOTICE, "Shard id %.40s update request for node id %.40s diverges from existing primary shard id %.40s, rejecting!", shard_id, node->name, clusterNodeGetMaster(node)->shard_id); + return; + } + if (shard_id && memcmp(node->shard_id, shard_id, CLUSTER_NAMELEN) != 0) { clusterRemoveNodeFromShard(node); memcpy(node->shard_id, shard_id, CLUSTER_NAMELEN);