diff --git a/src/debug.c b/src/debug.c index b7127979..cd3a22a9 100644 --- a/src/debug.c +++ b/src/debug.c @@ -332,9 +332,14 @@ void debugCommand(redisClient *c) { usleep(utime); addReply(c,shared.ok); + } else if (!strcasecmp(c->argv[1]->ptr,"set-active-expire") && + c->argc == 3) + { + server.active_expire_enabled = atoi(c->argv[2]->ptr); + addReply(c,shared.ok); } else { - addReplyError(c, - "Syntax error, try DEBUG [SEGFAULT|OBJECT |SWAPIN |SWAPOUT |RELOAD]"); + addReplyErrorFormat(c, "Unknown DEBUG subcommand '%s'", + (char*)c->argv[1]->ptr); } } diff --git a/src/redis.c b/src/redis.c index 07940011..dcb2499d 100644 --- a/src/redis.c +++ b/src/redis.c @@ -854,7 +854,8 @@ void clientsCron(void) { void databasesCron(void) { /* Expire keys by random sampling. Not required for slaves * as master will synthesize DELs for us. */ - if (server.masterhost == NULL) activeExpireCycle(); + if (server.active_expire_enabled && server.masterhost == NULL) + activeExpireCycle(); /* Perform hash tables rehashing if needed, but only if there are no * other processes saving the DB on disk. Otherwise rehashing is bad @@ -1203,6 +1204,7 @@ void initServerConfig() { server.verbosity = REDIS_NOTICE; server.maxidletime = REDIS_MAXIDLETIME; server.tcpkeepalive = 0; + server.active_expire_enabled = 1; server.client_max_querybuf_len = REDIS_MAX_QUERYBUF_LEN; server.saveparams = NULL; server.loading = 0; diff --git a/src/redis.h b/src/redis.h index fc6eb95c..a5ffa930 100644 --- a/src/redis.h +++ b/src/redis.h @@ -728,6 +728,7 @@ struct redisServer { int verbosity; /* Loglevel in redis.conf */ int maxidletime; /* Client timeout in seconds */ int tcpkeepalive; /* Set SO_KEEPALIVE if non-zero. */ + int active_expire_enabled; /* Can be disabled for testing purposes. */ size_t client_max_querybuf_len; /* Limit for client query buffer length */ int dbnum; /* Total number of configured DBs */ int daemonize; /* True if running as a daemon */