Ignore shardId updates from replica nodes#13877
Merged
sundb merged 3 commits intoredis:unstablefrom Mar 30, 2025
Merged
Conversation
Collaborator
|
@jdork0 It seems that this fix is not correct, there are two scenarios:
if (node->slaveof == NULL) {
assignShardIdToNode(node, shard_id, CLUSTER_TODO_SAVE_CONFIG);
for (int i = 0; i < clusterNodeNumSlaves(node); i++) {
clusterNode *slavenode = clusterNodeGetSlave(node, i);
if (memcmp(slavenode->shard_id, shard_id, CLUSTER_NAMELEN) != 0)
assignShardIdToNode(slavenode, shard_id, CLUSTER_TODO_SAVE_CONFIG|CLUSTER_TODO_FSYNC_CONFIG);
}
} else if (memcmp(node->slaveof->shard_id, shard_id, CLUSTER_NAMELEN) == 0) {
assignShardIdToNode(node, shard_id, CLUSTER_TODO_SAVE_CONFIG);
} |
Contributor
Author
|
@sundb, I think that looks ok. I'll do some testing and update the PR. |
Contributor
Author
|
@sundb, updated. I didn't run into any problems in my testing with the proposed change. |
sundb
reviewed
Mar 27, 2025
src/cluster_legacy.c
Outdated
Comment on lines
917
to
922
| * 1. Master supports but the replica does not. | ||
| * We might first update the replica's shard-id to the master's randomly | ||
| * generated shard-id. Then, when the master's shard-id arrives, we must | ||
| * also update all its replicas. | ||
| * All replicas under master will receive master shard-id. When coming | ||
| * from a release with no shard-id the master shard-id will be randomly | ||
| * generated. | ||
| * 2. If the master does not support but the replica does. | ||
| * We also need to synchronize the master's shard-id with the replica. | ||
| * 3. If neither of master and replica supports it. | ||
| * The master will have a randomly generated shard-id and will update | ||
| * the replica to match the master's shard-id. */ | ||
| * Only update replica shard-id after master has provided one. */ |
Collaborator
There was a problem hiding this comment.
what about
/* We always make our best effort to keep the shard-id consistent
* between the master and its replicas:
*
* 1. When updating the master's shard-id, we simultaneously update the
* shard-id of all its replicas to ensure consistency.
* 2. When updating replica's shard-id, if it differs from its master's shard-id,
* we discard this replica's shard-id and continue using master's shard-id.
* This applies even if the master does not support shard-id, in which
* case we rely on the master's randomly generated shard-id. */
sundb
approved these changes
Mar 27, 2025
Contributor
Author
|
@sundb, is there any timeframe where we could expect this fix to make it back into 7.2? |
tezc
reviewed
Mar 27, 2025
tezc
approved these changes
Mar 28, 2025
YaacovHazan
pushed a commit
to YaacovHazan/redis
that referenced
this pull request
Apr 22, 2025
Close redis#13868 This bug was introduced by redis#13468 ## Issue To maintain compatibility with older versions that do not support shardid, when a replica passes a shardid, we also update the master’s shardid accordingly. However, when both the master and replica support shardid, an issue arises: in one moment, the master may pass a shardid, causing us to update both the master and all its replicas to match the master’s shardid. But if the replica later passes a different shardid, we would then update the master’s shardid again, leading to continuous changes in shardid. ## Solution Regardless of the situation, we always ensure that the replica’s shardid remains consistent with the master’s shardid.
YaacovHazan
pushed a commit
to YaacovHazan/redis
that referenced
this pull request
Apr 22, 2025
Close redis#13868 This bug was introduced by redis#13468 To maintain compatibility with older versions that do not support shardid, when a replica passes a shardid, we also update the master’s shardid accordingly. However, when both the master and replica support shardid, an issue arises: in one moment, the master may pass a shardid, causing us to update both the master and all its replicas to match the master’s shardid. But if the replica later passes a different shardid, we would then update the master’s shardid again, leading to continuous changes in shardid. Regardless of the situation, we always ensure that the replica’s shardid remains consistent with the master’s shardid.
funny-dog
pushed a commit
to funny-dog/redis
that referenced
this pull request
Sep 17, 2025
Close redis#13868 This bug was introduced by redis#13468 ## Issue To maintain compatibility with older versions that do not support shardid, when a replica passes a shardid, we also update the master’s shardid accordingly. However, when both the master and replica support shardid, an issue arises: in one moment, the master may pass a shardid, causing us to update both the master and all its replicas to match the master’s shardid. But if the replica later passes a different shardid, we would then update the master’s shardid again, leading to continuous changes in shardid. ## Solution Regardless of the situation, we always ensure that the replica’s shardid remains consistent with the master’s shardid.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Close #13868
This bug was introduced by #13468
Issue
To maintain compatibility with older versions that do not support shardid, when a replica passes a shardid, we also update the master’s shardid accordingly.
However, when both the master and replica support shardid, an issue arises: in one moment, the master may pass a shardid, causing us to update both the master and all its replicas to match the master’s shardid. But if the replica later passes a different shardid, we would then update the master’s shardid again, leading to continuous changes in shardid.
Solution
Regardless of the situation, we always ensure that the replica’s shardid remains consistent with the master’s shardid.