]> git.saurik.com Git - redis.git/commitdiff
DEBUG RELOAD implemented, and test-redis.tcl modified to use it to check for persiste...
authorantirez <antirez@gmail.com>
Tue, 24 Nov 2009 20:44:20 +0000 (21:44 +0100)
committerantirez <antirez@gmail.com>
Tue, 24 Nov 2009 20:44:20 +0000 (21:44 +0100)
redis.c
test-redis.tcl

diff --git a/redis.c b/redis.c
index 302a2b419f75b3f6a8ee89780023fb3a8e92480b..a69fcb42977534e0b877a4e8ccea124d6ea81ebe 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -5742,6 +5742,18 @@ fmterr:
 static void debugCommand(redisClient *c) {
     if (!strcasecmp(c->argv[1]->ptr,"segfault")) {
         *((char*)-1) = 'x';
+    } else if (!strcasecmp(c->argv[1]->ptr,"reload")) {
+        if (rdbSave(server.dbfilename) != REDIS_OK) {
+            addReply(c,shared.err);
+            return;
+        }
+        emptyDb();
+        if (rdbLoad(server.dbfilename) != REDIS_OK) {
+            addReply(c,shared.err);
+            return;
+        }
+        redisLog(REDIS_WARNING,"DB reloaded by DEBUG RELOAD");
+        addReply(c,shared.ok);
     } else if (!strcasecmp(c->argv[1]->ptr,"object") && c->argc == 3) {
         dictEntry *de = dictFind(c->db->dict,c->argv[2]);
         robj *key, *val;
@@ -5757,7 +5769,7 @@ static void debugCommand(redisClient *c) {
                 key, key->refcount, val, val->refcount, val->encoding));
     } else {
         addReplySds(c,sdsnew(
-            "-ERR Syntax error, try DEBUG [SEGFAULT|OBJECT <key>]\r\n"));
+            "-ERR Syntax error, try DEBUG [SEGFAULT|OBJECT <key>|RELOAD]\r\n"));
     }
 }
 
index a4c3c618a2d72f99527b24af4fb3b8f91bf36f38..a7acf641f6b528e7641470602154303da3827aaa 100644 (file)
@@ -235,6 +235,19 @@ proc main {server port} {
         format $ok
     } {2000}
 
+    test {Check if the list is still ok after a DEBUG RELOAD} {
+        $r debug reload
+        set ok 0
+        for {set i 0} {$i < 1000} {incr i} {
+            set rint [expr int(rand()*1000)]
+            if {[$r lindex mylist $rint] eq $rint} {incr ok}
+            if {[$r lindex mylist [expr (-$rint)-1]] eq [expr 999-$rint]} {
+                incr ok
+            }
+        }
+        format $ok
+    } {2000}
+
     test {LLEN against non-list value error} {
         $r del mylist
         $r set mylist foobar
@@ -551,6 +564,12 @@ proc main {server port} {
         lsort [$r smembers setres]
     } {995 996 997 998 999}
 
+    test {SINTERSTORE with two sets, after a DEBUG RELOAD} {
+        $r debug reload
+        $r sinterstore setres set1 set2
+        lsort [$r smembers setres]
+    } {995 996 997 998 999}
+
     test {SUNIONSTORE with two sets} {
         $r sunionstore setres set1 set2
         lsort [$r smembers setres]
@@ -906,6 +925,25 @@ proc main {server port} {
         set _ $err
     } {}
 
+    test {ZSCORE after a DEBUG RELOAD} {
+        set aux {}
+        set err {}
+        $r del zscoretest
+        for {set i 0} {$i < 1000} {incr i} {
+            set score [expr rand()]
+            lappend aux $score
+            $r zadd zscoretest $score $i
+        }
+        $r debug reload
+        for {set i 0} {$i < 1000} {incr i} {
+            if {[$r zscore zscoretest $i] != [lindex $aux $i]} {
+                set err "Expected score was [lindex $aux $i] but got [$r zscore zscoretest $i] for element $i"
+                break
+            }
+        }
+        set _ $err
+    } {}
+
     test {ZRANGE and ZREVRANGE} {
         list [$r zrange ztmp 0 -1] [$r zrevrange ztmp 0 -1]
     } {{y x z} {z x y}}