Merge tag '6.0.3' into unstable

Redis 6.0.3


Former-commit-id: 43649fc5b4425fb05e2c1aa48da7c07bc83ce24d
This commit is contained in:
John Sully 2020-05-22 16:53:10 -04:00
commit 36032618b2
3 changed files with 21 additions and 16 deletions

View File

@ -11,6 +11,14 @@ CRITICAL: There is a critical bug affecting MOST USERS. Upgrade ASAP.
SECURITY: There are security fixes in the release.
--------------------------------------------------------------------------------
================================================================================
Redis 6.0.3 Released Sat May 16 18:10:21 CEST 2020
================================================================================
Upgrade urgency CRITICAL: a crash introduced in 6.0.2 is now fixed.
1eab62f7e Remove the client from CLOSE_ASAP list before caching the master.
================================================================================
Redis 6.0.2 Released Fri May 15 22:24:36 CEST 2020
================================================================================

View File

@ -1545,6 +1545,16 @@ bool freeClient(client *c) {
/* Notify module system that this client auth status changed. */
moduleNotifyUserChanged(c);
/* If this client was scheduled for async freeing we need to remove it
* from the queue. Note that we need to do this here, because later
* we may call replicationCacheMaster() and the client should already
* be removed from the list of clients to free. */
if (c->flags & CLIENT_CLOSE_ASAP) {
ln = listSearchKey(g_pserver->clients_to_close,c);
serverAssert(ln != NULL);
listDelNode(g_pserver->clients_to_close,ln);
}
/* If it is our master that's beging disconnected we should make sure
* to cache the state to try a partial resynchronization later.
*
@ -1552,9 +1562,8 @@ bool freeClient(client *c) {
* some unexpected state, by checking its flags. */
if (FActiveMaster(c)) {
serverLog(LL_WARNING,"Connection with master lost.");
if (!(c->flags & (CLIENT_PROTOCOL_ERROR|
CLIENT_BLOCKED)))
{
if (!(c->flags & (CLIENT_PROTOCOL_ERROR|CLIENT_BLOCKED))) {
c->flags &= ~(CLIENT_CLOSE_ASAP|CLIENT_CLOSE_AFTER_REPLY);
replicationCacheMaster(MasterInfoFromClient(c), c);
return false;
}
@ -1622,15 +1631,7 @@ bool freeClient(client *c) {
* we lost the connection with the master. */
if (c->flags & CLIENT_MASTER) replicationHandleMasterDisconnection(MasterInfoFromClient(c));
/* If this client was scheduled for async freeing we need to remove it
* from the queue. */
if (c->flags & CLIENT_CLOSE_ASAP) {
ln = listSearchKey(g_pserver->clients_to_close,c);
serverAssert(ln != NULL);
listDelNode(g_pserver->clients_to_close,ln);
}
/* Remove the contribution that this client gave to our
/* Remove the contribution that this client gave to our
* incrementally computed memory usage. */
g_pserver->stat_clients_type_memory[c->client_cron_last_memory_type] -=
c->client_cron_last_memory_usage;
@ -3459,7 +3460,6 @@ void processEventsWhileBlocked(int iel) {
}
int aof_state = g_pserver->aof_state;
aeReleaseLock();
serverAssertDebug(!GlobalLocksAcquired());
try

View File

@ -3244,9 +3244,6 @@ void replicationCacheMaster(redisMaster *mi, client *c) {
/* Unlink the client from the server structures. */
unlinkClient(c);
/* Clear flags that can create issues once we reconnect the client. */
c->flags &= ~(CLIENT_CLOSE_ASAP|CLIENT_CLOSE_AFTER_REPLY);
/* Reset the master client so that's ready to accept new commands:
* we want to discard te non processed query buffers and non processed
* offsets, including pending transactions, already populated arguments,