Fix failover command test failures

Former-commit-id: d3c37c7159a92319759a33851669862a82cf1b28
This commit is contained in:
John Sully 2021-05-29 01:19:12 +00:00
parent 0cdb32f3e4
commit 97d6875862
4 changed files with 11 additions and 9 deletions

View File

@ -3742,8 +3742,8 @@ void flushSlavesOutputBuffers(void) {
* In such a case, the duration is set to the maximum and new end time and the
* type is set to the more restrictive type of pause. */
void pauseClients(mstime_t end, pause_type type) {
if (type > serverTL->client_pause_type) {
serverTL->client_pause_type = type;
if (type > g_pserver->client_pause_type) {
g_pserver->client_pause_type = type;
}
if (end > g_pserver->client_pause_end_time) {
@ -3766,7 +3766,7 @@ void unpauseClients(void) {
listIter li;
client *c;
serverTL->client_pause_type = CLIENT_PAUSE_OFF;
g_pserver->client_pause_type = CLIENT_PAUSE_OFF;
/* Unblock all of the clients so they are reprocessed. */
listRewind(g_pserver->paused_clients,&li);
@ -3779,7 +3779,7 @@ void unpauseClients(void) {
/* Returns true if clients are paused and false otherwise. */
int areClientsPaused(void) {
return serverTL->client_pause_type != CLIENT_PAUSE_OFF;
return g_pserver->client_pause_type != CLIENT_PAUSE_OFF;
}
/* Checks if the current client pause has elapsed and unpause clients

View File

@ -2576,7 +2576,8 @@ void beforeSleep(struct aeEventLoop *eventLoop) {
/* We may have recieved updates from clients about their current offset. NOTE:
* this can't be done where the ACK is recieved since failover will disconnect
* our clients. */
updateFailoverStatus();
if (iel == IDX_EVENT_LOOP_MAIN)
updateFailoverStatus();
/* Send the invalidation messages to clients participating to the
* client side caching protocol in broadcasting (BCAST) mode. */
@ -3426,7 +3427,6 @@ static void initServerThread(struct redisServerThreadVars *pvar, int fMain)
pvar->cclients = 0;
pvar->in_eval = 0;
pvar->in_exec = 0;
pvar->client_pause_type = CLIENT_PAUSE_OFF;
pvar->el = aeCreateEventLoop(g_pserver->maxclients+CONFIG_FDSET_INCR);
aeSetBeforeSleepProc(pvar->el, beforeSleep, AE_SLEEP_THREADSAFE);
aeSetAfterSleepProc(pvar->el, afterSleep, AE_SLEEP_THREADSAFE);
@ -3518,6 +3518,7 @@ void initServer(void) {
g_pserver->blocked_last_cron = 0;
g_pserver->replication_allowed = 1;
g_pserver->blocking_op_nesting = 0;
g_pserver->client_pause_type = CLIENT_PAUSE_OFF;
if ((g_pserver->tls_port || g_pserver->tls_replication || g_pserver->tls_cluster)
@ -4529,8 +4530,8 @@ int processCommand(client *c, int callFlags) {
/* If the server is paused, block the client until
* the pause has ended. Replicas are never paused. */
if (!(c->flags & CLIENT_SLAVE) &&
((serverTL->client_pause_type == CLIENT_PAUSE_ALL) ||
(serverTL->client_pause_type == CLIENT_PAUSE_WRITE && is_may_replicate_command)))
((g_pserver->client_pause_type == CLIENT_PAUSE_ALL) ||
(g_pserver->client_pause_type == CLIENT_PAUSE_WRITE && is_may_replicate_command)))
{
c->bpop.timeout = 0;
blockClient(c,BLOCKED_PAUSE);

View File

@ -1480,7 +1480,6 @@ struct redisServerThreadVars {
aeEventLoop *el;
socketFds ipfd; /* TCP socket file descriptors */
socketFds tlsfd; /* TLS socket file descriptors */
pause_type client_pause_type; /* True if clients are currently paused */
int in_eval; /* Are we inside EVAL? */
int in_exec; /* Are we inside EXEC? */
std::vector<client*> clients_pending_write; /* There is to write or install handler. */
@ -1620,6 +1619,7 @@ struct redisServer {
int propagate_in_transaction; /* Make sure we don't propagate nested MULTI/EXEC */
char *ignore_warnings; /* Config: warnings that should be ignored. */
int client_pause_in_transaction; /* Was a client pause executed during this Exec? */
pause_type client_pause_type; /* True if clients are currently paused */
/* Modules */
::dict *moduleapi; /* Exported core APIs dictionary for modules. */
::dict *sharedapi; /* Like moduleapi but containing the APIs that

View File

@ -279,6 +279,7 @@ start_server {} {
assert_match *slave* [$node_2 role]
# We will cycle all of our replicas here and force a psync.
after 100
assert_equal [expr [s 0 sync_partial_ok] - $initial_psyncs] 2
assert_equal [expr [s 0 sync_full] - $initial_syncs] 0