]> git.saurik.com Git - redis.git/commitdiff
expireGenericCommand(): better variable names and a top-comment that describes the...
authorantirez <antirez@gmail.com>
Thu, 5 Apr 2012 13:52:08 +0000 (15:52 +0200)
committerantirez <antirez@gmail.com>
Thu, 5 Apr 2012 22:40:36 +0000 (00:40 +0200)
src/db.c

index 2cc70d2c3c078cef6932d1d83816b85c212a790f..943878b40746a34138ad30f71acb6b53d29d01f1 100644 (file)
--- a/src/db.c
+++ b/src/db.c
@@ -507,16 +507,23 @@ int stringObjectEqualsMs(robj *a) {
     return tolower(arg[0]) == 'm' && tolower(arg[1]) == 's' && arg[2] == '\0';
 }
 
     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];
     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;
 
         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) {
 
     de = dictFind(c->db->dict,key->ptr);
     if (de == NULL) {
@@ -529,7 +536,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. */
      *
      * 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));
         robj *aux;
 
         redisAssertWithInfo(c,key,dbDelete(c->db,key));
@@ -543,7 +550,7 @@ void expireGenericCommand(redisClient *c, long long offset, int unit) {
         addReply(c, shared.cone);
         return;
     } else {
         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++;
         addReply(c,shared.cone);
         signalModifiedKey(c->db,key);
         server.dirty++;