summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2014-10-29 12:48:22 +0100
committerantirez <antirez@gmail.com>2014-10-29 12:48:22 +0100
commit9ec22d9223ca3d74aa81dd5af86809ceeb730670 (patch)
tree71f7c313ebdbc1b643f17bc1b051076c86e7d00c /src
parent4b8f4b90b904c803cdc4a3ba82fee6e8ee8423fe (diff)
downloadredis-9ec22d9223ca3d74aa81dd5af86809ceeb730670.tar.gz
Diskless replication: missing listRewind() added.memsync
This caused BGSAVE to be triggered a second time without any need when we switch from socket to disk target via the command CONFIG SET repl-diskless-sync no and there is already a slave waiting for the BGSAVE to start. Also comments clarified about what is happening.
Diffstat (limited to 'src')
-rw-r--r--src/replication.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/replication.c b/src/replication.c
index 43d5b6935..77f9fa8bc 100644
--- a/src/replication.c
+++ b/src/replication.c
@@ -2062,7 +2062,11 @@ void replicationCron(void) {
* if there was a recent socket -> disk config change. */
if (startBgsaveForReplication() == REDIS_OK) {
/* It started! We need to change the state of slaves
- * from WAIT_BGSAVE_START to WAIT_BGSAVE_END. */
+ * from WAIT_BGSAVE_START to WAIT_BGSAVE_END in case
+ * the current target is disk. Otherwise it was already done
+ * by rdbSaveToSlavesSockets() which is called by
+ * startBgsaveForReplication(). */
+ listRewind(server.slaves,&li);
while((ln = listNext(&li))) {
redisClient *slave = ln->value;
if (slave->replstate == REDIS_REPL_WAIT_BGSAVE_START)