Avoid crash when a cluster node is a replica of a replica of itself (#11263)

This commit is contained in:
Viktor Söderqvist 2022-09-14 02:48:48 +02:00 committed by GitHub
parent 6c03786b66
commit 42e4241ece
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1977,7 +1977,13 @@ void clusterUpdateSlotsConfigWith(clusterNode *sender, uint64_t senderConfigEpoc
clusterDoBeforeSleep(CLUSTER_TODO_SAVE_CONFIG|
CLUSTER_TODO_UPDATE_STATE|
CLUSTER_TODO_FSYNC_CONFIG);
} else if (myself->slaveof && myself->slaveof->slaveof) {
} else if (myself->slaveof && myself->slaveof->slaveof &&
/* In some rare case when CLUSTER FAILOVER TAKEOVER is used, it
* can happen that myself is a replica of a replica of myself. If
* this happens, we do nothing to avoid a crash and wait for the
* admin to repair the cluster. */
myself->slaveof->slaveof != myself)
{
/* Safeguard against sub-replicas. A replica's master can turn itself
* into a replica if its last slot is removed. If no other node takes
* over the slot, there is nothing else to trigger replica migration. */