From: antirez Date: Sun, 6 Dec 2009 00:16:12 +0000 (+0100) Subject: Regression tests for SETNX and MSETNX bugs added X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/5acdc75d66b855cd621f324b1a15c48c8491366c Regression tests for SETNX and MSETNX bugs added --- diff --git a/redis.c b/redis.c index 650c7a5c..75490f23 100644 --- 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) { diff --git a/test-redis.tcl b/test-redis.tcl index 35a6683b..2dd87f1b 100644 --- a/test-redis.tcl +++ b/test-redis.tcl @@ -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