Skip to content

Commit

Permalink
expireGenericCommand(): better variable names and a top-comment that …
Browse files Browse the repository at this point in the history
…describes the function's behavior.
  • Loading branch information
antirez committed Apr 5, 2012
1 parent c6bf4a0 commit 70381bb
Showing 1 changed file with 14 additions and 7 deletions.
21 changes: 14 additions & 7 deletions src/db.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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));
Expand All @@ -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++;
Expand Down

0 comments on commit 70381bb

Please sign in to comment.