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) { ...@@ -1037,25 +1037,14 @@ static void freeClientArgv(client *c) {
/* Close all the slaves connections. This is useful in chained replication /* 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 * when we resync with our own master and want to force all our slaves to
* resync with us as well. * resync with us as well. */
* void disconnectSlaves(void) {
* 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) {
listIter li; listIter li;
listNode *ln; listNode *ln;
listRewind(server.slaves,&li); listRewind(server.slaves,&li);
while((ln = listNext(&li))) { while((ln = listNext(&li))) {
listNode *ln = listFirst(server.slaves); listNode *ln = listFirst(server.slaves);
if (async) freeClientAsync((client*)ln->value);
freeClientAsync((client*)ln->value);
else
freeClient((client*)ln->value);
} }
} }
......
...@@ -2086,7 +2086,7 @@ int slaveTryPartialResynchronization(connection *conn, int read_reply) { ...@@ -2086,7 +2086,7 @@ int slaveTryPartialResynchronization(connection *conn, int read_reply) {
memcpy(server.cached_master->replid,new,sizeof(server.replid)); memcpy(server.cached_master->replid,new,sizeof(server.replid));
/* Disconnect all the sub-slaves: they need to be notified. */ /* Disconnect all the sub-slaves: they need to be notified. */
disconnectSlaves(0); disconnectSlaves();
} }
} }
...@@ -2359,7 +2359,7 @@ void syncWithMaster(connection *conn) { ...@@ -2359,7 +2359,7 @@ void syncWithMaster(connection *conn) {
* as well, if we have any sub-slaves. The master may transfer us an * 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 * entirely different data set and we have no way to incrementally feed
* our slaves after that. */ * 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. */ freeReplicationBacklog(); /* Don't allow our chained slaves to PSYNC. */
/* Fall back to SYNC if needed. Otherwise psync_result == PSYNC_FULLRESYNC /* Fall back to SYNC if needed. Otherwise psync_result == PSYNC_FULLRESYNC
...@@ -2506,7 +2506,7 @@ void replicationSetMaster(char *ip, int port) { ...@@ -2506,7 +2506,7 @@ void replicationSetMaster(char *ip, int port) {
/* Force our slaves to resync with us as well. They may hopefully be able /* 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. */ * to partially resync with us, but we can notify the replid change. */
disconnectSlaves(0); disconnectSlaves();
cancelReplicationHandshake(); cancelReplicationHandshake();
/* Before destroying our master state, create a cached master using /* Before destroying our master state, create a cached master using
* our own parameters, to later PSYNC with the new master. */ * our own parameters, to later PSYNC with the new master. */
...@@ -2553,7 +2553,7 @@ void replicationUnsetMaster(void) { ...@@ -2553,7 +2553,7 @@ void replicationUnsetMaster(void) {
* of the replication ID change (see shiftReplicationId() call). However * of the replication ID change (see shiftReplicationId() call). However
* the slaves will be able to partially resync with us, so it will be * the slaves will be able to partially resync with us, so it will be
* a very fast reconnection. */ * a very fast reconnection. */
disconnectSlaves(0); disconnectSlaves();
server.repl_state = REPL_STATE_NONE; server.repl_state = REPL_STATE_NONE;
/* We need to make sure the new master will start the replication stream /* We need to make sure the new master will start the replication stream
...@@ -2788,7 +2788,7 @@ void replicationCacheMaster(client *c) { ...@@ -2788,7 +2788,7 @@ void replicationCacheMaster(client *c) {
* from the stream and their offset would no longer match: upon * from the stream and their offset would no longer match: upon
* disconnection they will also trim the final PINGs and will be able * disconnection they will also trim the final PINGs and will be able
* to incrementally sync without issues. */ * 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 /* If the "meaningful" offset, that is the offset without the final PINGs
......
...@@ -1660,7 +1660,7 @@ int getClientType(client *c); ...@@ -1660,7 +1660,7 @@ int getClientType(client *c);
int getClientTypeByName(char *name); int getClientTypeByName(char *name);
char *getClientTypeName(int class); char *getClientTypeName(int class);
void flushSlavesOutputBuffers(void); void flushSlavesOutputBuffers(void);
void disconnectSlaves(int async); void disconnectSlaves(void);
int listenToPort(int port, int *fds, int *count); int listenToPort(int port, int *fds, int *count);
void pauseClients(mstime_t duration); void pauseClients(mstime_t duration);
int clientsArePaused(void); 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