Commit 0471dcaf authored by antirez's avatar antirez
Browse files

Revert "Make disconnectSlaves() synchronous in the base case."

This reverts commit adc5df1b.
parent 2eb2f363
......@@ -1037,25 +1037,14 @@ static void freeClientArgv(client *c) {
/* Close all the slaves connections. This is useful in chained replication
* when we resync with our own master and want to force all our slaves to
* resync with us as well.
*
* If 'async' is non-zero we free the clients asynchronously. This is needed
* when we call this function from a context where in the chain of the
* callers somebody is iterating the list of clients. For instance when
* CLIENT KILL TYPE master is called, caching the master client may
* adjust the meaningful offset of replication, and in turn call
* discionectSlaves(). Since CLIENT KILL iterates the clients this is
* not safe. */
void disconnectSlaves(int async) {
* resync with us as well. */
void disconnectSlaves(void) {
listIter li;
listNode *ln;
listRewind(server.slaves,&li);
while((ln = listNext(&li))) {
listNode *ln = listFirst(server.slaves);
if (async)
freeClientAsync((client*)ln->value);
else
freeClient((client*)ln->value);
}
}
......
......@@ -2086,7 +2086,7 @@ int slaveTryPartialResynchronization(connection *conn, int read_reply) {
memcpy(server.cached_master->replid,new,sizeof(server.replid));
/* Disconnect all the sub-slaves: they need to be notified. */
disconnectSlaves(0);
disconnectSlaves();
}
}
......@@ -2359,7 +2359,7 @@ void syncWithMaster(connection *conn) {
* as well, if we have any sub-slaves. The master may transfer us an
* entirely different data set and we have no way to incrementally feed
* our slaves after that. */
disconnectSlaves(0); /* Force our slaves to resync with us as well. */
disconnectSlaves(); /* Force our slaves to resync with us as well. */
freeReplicationBacklog(); /* Don't allow our chained slaves to PSYNC. */
/* Fall back to SYNC if needed. Otherwise psync_result == PSYNC_FULLRESYNC
......@@ -2506,7 +2506,7 @@ void replicationSetMaster(char *ip, int port) {
/* Force our slaves to resync with us as well. They may hopefully be able
* to partially resync with us, but we can notify the replid change. */
disconnectSlaves(0);
disconnectSlaves();
cancelReplicationHandshake();
/* Before destroying our master state, create a cached master using
* our own parameters, to later PSYNC with the new master. */
......@@ -2553,7 +2553,7 @@ void replicationUnsetMaster(void) {
* of the replication ID change (see shiftReplicationId() call). However
* the slaves will be able to partially resync with us, so it will be
* a very fast reconnection. */
disconnectSlaves(0);
disconnectSlaves();
server.repl_state = REPL_STATE_NONE;
/* We need to make sure the new master will start the replication stream
......@@ -2788,7 +2788,7 @@ void replicationCacheMaster(client *c) {
* from the stream and their offset would no longer match: upon
* disconnection they will also trim the final PINGs and will be able
* to incrementally sync without issues. */
if (offset_adjusted) disconnectSlaves(1);
if (offset_adjusted) disconnectSlaves();
}
/* If the "meaningful" offset, that is the offset without the final PINGs
......
......@@ -1660,7 +1660,7 @@ int getClientType(client *c);
int getClientTypeByName(char *name);
char *getClientTypeName(int class);
void flushSlavesOutputBuffers(void);
void disconnectSlaves(int async);
void disconnectSlaves(void);
int listenToPort(int port, int *fds, int *count);
void pauseClients(mstime_t duration);
int clientsArePaused(void);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment