]> git.saurik.com Git - redis.git/commitdiff
Regression tests for SETNX and MSETNX bugs added
authorantirez <antirez@gmail.com>
Sun, 6 Dec 2009 00:16:12 +0000 (01:16 +0100)
committerantirez <antirez@gmail.com>
Sun, 6 Dec 2009 00:16:12 +0000 (01:16 +0100)
redis.c
test-redis.tcl

diff --git a/redis.c b/redis.c
index 650c7a5c488f3f84aedc9e065ecd5a66bf1f2a80..75490f239f425cb8f04595070bd9cc16becd0243 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -2978,7 +2978,7 @@ static void echoCommand(redisClient *c) {
 static void setGenericCommand(redisClient *c, int nx) {
     int retval;
 
-    lookupKeyWrite(c->db,c->argv[1]);
+    deleteIfVolatile(c->db,c->argv[1]);
     retval = dictAdd(c->db->dict,c->argv[1],c->argv[2]);
     if (retval == DICT_ERR) {
         if (!nx) {
index 35a6683b92fae1776ea2b15978b647e618f45862..2dd87f1bd2265dd5f3d6a81959687bdd715a45ee 100644 (file)
@@ -165,6 +165,13 @@ proc main {server port} {
         $r get novar2
     } {foobared}
 
+    test {SETNX will overwrite EXPIREing key} {
+        $r set x 10
+        $r expire x 10000
+        $r setnx x 20
+        $r get x
+    } {20}
+
     test {EXISTS} {
         set res {}
         $r set newkey test
@@ -901,6 +908,13 @@ proc main {server port} {
         list [$r msetnx x1 xxx y2 yyy] [$r get x1] [$r get y2]
     } {1 xxx yyy}
 
+    test {MSETNX should remove all the volatile keys even on failure} {
+        $r mset x 1 y 2 z 3
+        $r expire y 10000
+        $r expire z 10000
+        list [$r msetnx x A y B z C] [$r mget x y z]
+    } {0 {1 {} {}}}
+
     test {ZSET basic ZADD and score update} {
         $r zadd ztmp 10 x
         $r zadd ztmp 20 y