summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhaozhao.zz <zhaozhao.zz@alibaba-inc.com>2020-05-25 11:17:51 +0800
committerzhaozhao.zz <zhaozhao.zz@alibaba-inc.com>2020-05-25 11:17:54 +0800
commiteec769be59d2100748bbb45a0e97e7834f490d4a (patch)
tree4fc41e88d78209ebd0cfc07d63c686a4a792cabb
parentb89e6d74faa27c9edf9d5e867a408b6b5c39b05e (diff)
downloadredis-eec769be59d2100748bbb45a0e97e7834f490d4a.tar.gz
PSYNC2: second_replid_offset should be real meaningful offset
After adjustMeaningfulReplOffset(), all the other related variable should be updated, including server.second_replid_offset. Or the old version redis like 5.0 may receive wrong data from replication stream, cause redis 5.0 can sync with redis 6.0, but doesn't know meaningful offset.
-rw-r--r--src/replication.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/replication.c b/src/replication.c
index e1c65d48b..d45a15783 100644
--- a/src/replication.c
+++ b/src/replication.c
@@ -2531,14 +2531,14 @@ void replicationUnsetMaster(void) {
sdsfree(server.masterhost);
server.masterhost = NULL;
+ if (server.master) freeClient(server.master);
+ replicationDiscardCachedMaster();
+ cancelReplicationHandshake();
/* When a slave is turned into a master, the current replication ID
* (that was inherited from the master at synchronization time) is
* used as secondary ID up to the current offset, and a new replication
* ID is created to continue with a new replication history. */
shiftReplicationId();
- if (server.master) freeClient(server.master);
- replicationDiscardCachedMaster();
- cancelReplicationHandshake();
/* Disconnecting all the slaves is required: we need to inform slaves
* of the replication ID change (see shiftReplicationId() call). However
* the slaves will be able to partially resync with us, so it will be