Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
0471dcaf
Commit
0471dcaf
authored
May 27, 2020
by
antirez
Browse files
Revert "Make disconnectSlaves() synchronous in the base case."
This reverts commit
adc5df1b
.
parent
2eb2f363
Changes
3
Show whitespace changes
Inline
Side-by-side
src/networking.c
View file @
0471dcaf
...
@@ -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
);
}
}
}
}
...
...
src/replication.c
View file @
0471dcaf
...
@@ -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
...
...
src/server.h
View file @
0471dcaf
...
@@ -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
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment