mirror of
http://github.com/valkey-io/valkey
synced 2024-11-22 00:52:38 +00:00
don't process EXPIRE with negative TTL or EXPIREAT with time in the past if we are a slave too (see http://groups.google.com/group/redis-db/browse_thread/thread/5a931fefb88b16d5). Also propagate it as DEL.
This commit is contained in:
parent
d30dafe7f4
commit
b8082ae7ba
19
src/db.c
19
src/db.c
@ -496,9 +496,24 @@ void expireGenericCommand(redisClient *c, robj *key, robj *param, long offset) {
|
||||
return;
|
||||
}
|
||||
if (seconds <= 0 && !server.loading) {
|
||||
if (dbDelete(c->db,key)) server.dirty++;
|
||||
addReply(c, shared.cone);
|
||||
/* EXPIRE with negative TTL, or EXPIREAT with a timestamp into the past
|
||||
* should never be executed as a DEL when load the AOF or in the context
|
||||
* of a slave instance.
|
||||
*
|
||||
* Instead we take the other branch of the IF statement setting an expire
|
||||
* (possibly in the past) and wait for an explicit DEL from the master. */
|
||||
if (seconds <= 0 && !server.loading && !server.masterhost) {
|
||||
robj *aux;
|
||||
|
||||
redisAssert(dbDelete(c->db,key));
|
||||
server.dirty++;
|
||||
|
||||
/* Replicate/AOF this as an explicit DEL. */
|
||||
aux = createStringObject("DEL",3);
|
||||
rewriteClientCommandVector(c,2,aux,key);
|
||||
decrRefCount(aux);
|
||||
touchWatchedKey(c->db,key);
|
||||
addReply(c, shared.cone);
|
||||
return;
|
||||
} else {
|
||||
time_t when = time(NULL)+seconds;
|
||||
|
Loading…
Reference in New Issue
Block a user