WAIT AOF: deny if AOF is off. Trigger sync in proper place.

This commit is contained in:
antirez 2018-02-28 12:31:50 +01:00
parent d69fc0d76a
commit 6cba12397b
2 changed files with 15 additions and 6 deletions

View File

@ -2404,6 +2404,10 @@ void waitCommand(client *c) {
/* AOF or number of replicas argument parsing. */
if (!strcasecmp(c->argv[1]->ptr,"AOF")) {
waitaof = 1;
if (server.aof_state != AOF_ON) {
addReplyError(c,"WAIT AOF is only allowed when AOF is enabled");
return;
}
} else {
if (getLongFromObjectOrReply(c,c->argv[1],&numreplicas,NULL) != C_OK)
return;
@ -2495,11 +2499,6 @@ void processClientsBlockedInWait(void) {
}
}
}
/* If after this cycle we have still clients blocked, try to start
* a new AOF fsync. If one is already in progress nothig will happen. */
if (server.blocked_clients_by_type[BLOCKED_AOF])
aofStartBackgroundFsync();
}
/* Return the slave replication offset for this instance, that is

View File

@ -1230,9 +1230,19 @@ void beforeSleep(struct aeEventLoop *eventLoop) {
/* Unblock all the clients blocked for synchronous replication
* or AOF sync in WAIT. */
if (listLength(server.clients_waiting_acks))
if (listLength(server.clients_waiting_acks)) {
processClientsBlockedInWait();
/* If after this cycle we have still clients blocked waiting for
* AOF fsync, try to start a new sync cycle. Note that if one is
* already in progress, the call does nothing. */
if (server.blocked_clients_by_type[BLOCKED_AOF] &&
server.aof_state == AOF_ON)
{
aofStartBackgroundFsync();
}
}
/* Check if there are clients unblocked by modules that implement
* blocking commands. */
moduleHandleBlockedClients();