Fix failover command test failures
Former-commit-id: d3c37c7159a92319759a33851669862a82cf1b28
This commit is contained in:
parent
0cdb32f3e4
commit
97d6875862
@ -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
|
||||
|
@ -2576,6 +2576,7 @@ 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. */
|
||||
if (iel == IDX_EVENT_LOOP_MAIN)
|
||||
updateFailoverStatus();
|
||||
|
||||
/* Send the invalidation messages to clients participating to the
|
||||
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user