expireGenericCommand(): better variable names and a top-comment that describes the function's behavior.

This commit is contained in:
antirez 2012-04-05 15:52:08 +02:00
parent c6bf4a0034
commit 70381bbf82

View File

@ -518,16 +518,23 @@ int stringObjectEqualsMs(robj *a) {
return tolower(arg[0]) == 'm' && tolower(arg[1]) == 's' && arg[2] == '\0';
}
void expireGenericCommand(redisClient *c, long long offset, int unit) {
/* This is the generic command implementation for EXPIRE, PEXPIRE, EXPIREAT
* and PEXPIREAT. Because the commad second argument may be relative or absolute
* the "basetime" argument is used to signal what the base time is (either 0
* for *AT variants of the command, or the current time for relative expires).
*
* unit is either UNIT_SECONDS or UNIT_MILLISECONDS, and is only used for
* the argv[2] parameter. The basetime is always specified in milliesconds. */
void expireGenericCommand(redisClient *c, long long basetime, int unit) {
dictEntry *de;
robj *key = c->argv[1], *param = c->argv[2];
long long milliseconds;
long long when; /* unix time in milliseconds when the key will expire. */
if (getLongLongFromObjectOrReply(c, param, &milliseconds, NULL) != REDIS_OK)
if (getLongLongFromObjectOrReply(c, param, &when, NULL) != REDIS_OK)
return;
if (unit == UNIT_SECONDS) milliseconds *= 1000;
milliseconds += offset;
if (unit == UNIT_SECONDS) when *= 1000;
when += basetime;
de = dictFind(c->db->dict,key->ptr);
if (de == NULL) {
@ -540,7 +547,7 @@ void expireGenericCommand(redisClient *c, long long offset, int unit) {
*
* 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 (milliseconds <= mstime() && !server.loading && !server.masterhost) {
if (when <= mstime() && !server.loading && !server.masterhost) {
robj *aux;
redisAssertWithInfo(c,key,dbDelete(c->db,key));
@ -554,7 +561,7 @@ void expireGenericCommand(redisClient *c, long long offset, int unit) {
addReply(c, shared.cone);
return;
} else {
setExpire(c->db,key,milliseconds);
setExpire(c->db,key,when);
addReply(c,shared.cone);
signalModifiedKey(c->db,key);
server.dirty++;