summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhaozhao.zz <zhaozhao.zz@alibaba-inc.com>2020-03-28 20:59:01 +0800
committerzhaozhao.zz <zhaozhao.zz@alibaba-inc.com>2020-03-28 20:59:01 +0800
commit36ee294e83e2c1e9d8f3ec04de3b6c734185f699 (patch)
tree5a2ec93b5cb2954f36241ba5efa54607aa598819
parent97f1c808ce522113935bad244a9505a87ba27f9e (diff)
downloadredis-36ee294e83e2c1e9d8f3ec04de3b6c734185f699.tar.gz
PSYNC2: reset backlog_idx and master_repl_offset correctly
-rw-r--r--src/replication.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/replication.c b/src/replication.c
index 20f9a2129..3e9910374 100644
--- a/src/replication.c
+++ b/src/replication.c
@@ -2754,11 +2754,16 @@ void replicationCacheMasterUsingMyself(void) {
server.master_repl_offset,
delta);
server.master_initial_offset = server.master_repl_meaningful_offset;
- server.repl_backlog_histlen -= delta;
- server.repl_backlog_idx =
- (server.repl_backlog_idx + (server.repl_backlog_size - delta)) %
- server.repl_backlog_size;
- if (server.repl_backlog_histlen < 0) server.repl_backlog_histlen = 0;
+ server.master_repl_offset = server.master_repl_meaningful_offset;
+ if (server.repl_backlog_histlen <= delta) {
+ server.repl_backlog_histlen = 0;
+ server.repl_backlog_idx = 0;
+ } else {
+ server.repl_backlog_histlen -= delta;
+ server.repl_backlog_idx =
+ (server.repl_backlog_idx + (server.repl_backlog_size - delta)) %
+ server.repl_backlog_size;
+ }
}
/* The master client we create can be set to any DBID, because