diff options
Diffstat (limited to 'src/replication.c')
-rw-r--r-- | src/replication.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/replication.c b/src/replication.c index 064d2bece..328382570 100644 --- a/src/replication.c +++ b/src/replication.c @@ -575,7 +575,7 @@ int startBgsaveForReplication(int mincapa) { * otherwise slave will miss repl-stream-db. */ if (rsiptr) { if (socket_target) - retval = rdbSaveToSlavesSockets(rsiptr); + retval = rdbSaveToSlavesSockets(mincapa, rsiptr); else retval = rdbSaveBackground(server.rdb_filename,rsiptr); } else { @@ -593,6 +593,7 @@ int startBgsaveForReplication(int mincapa) { client *slave = ln->value; if (slave->replstate == SLAVE_STATE_WAIT_BGSAVE_START) { + slave->replstate = REPL_STATE_NONE; slave->flags &= ~CLIENT_SLAVE; listDelNode(server.slaves,ln); addReplyError(slave, @@ -611,8 +612,11 @@ int startBgsaveForReplication(int mincapa) { client *slave = ln->value; if (slave->replstate == SLAVE_STATE_WAIT_BGSAVE_START) { - replicationSetupSlaveForFullResync(slave, - getPsyncInitialOffset()); + /* Check slave has at least the minimum capabilities */ + if ((mincapa & slave->slave_capa) != mincapa) + continue; + replicationSetupSlaveForFullResync(slave, + getPsyncInitialOffset()); } } } |