summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSalvatore Sanfilippo <antirez@gmail.com>2020-03-28 14:52:11 +0100
committerGitHub <noreply@github.com>2020-03-28 14:52:11 +0100
commite8afadd52c32c656d56ea9d5b235881f04c9bd8a (patch)
tree5a2ec93b5cb2954f36241ba5efa54607aa598819
parent97f1c808ce522113935bad244a9505a87ba27f9e (diff)
parent36ee294e83e2c1e9d8f3ec04de3b6c734185f699 (diff)
downloadredis-e8afadd52c32c656d56ea9d5b235881f04c9bd8a.tar.gz
Merge pull request #7032 from soloestoy/psync2-meaningful-offset-bugfix
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