From 9ec22d9223ca3d74aa81dd5af86809ceeb730670 Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 29 Oct 2014 12:48:22 +0100 Subject: Diskless replication: missing listRewind() added. 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. --- src/replication.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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) -- cgit v1.2.1