]> git.saurik.com Git - redis.git/commitdiff
Fixed RESTORE hash failure (Issue #532)
authorAlex Mitrofanov <alexm@airg.com>
Sat, 2 Jun 2012 01:48:45 +0000 (18:48 -0700)
committerantirez <antirez@gmail.com>
Sat, 2 Jun 2012 08:24:27 +0000 (10:24 +0200)
(additional commit notes by antirez@gmail.com):

The rdbIsObjectType() macro was not updated when the new RDB object type
of ziplist encoded hashes was added.

As a result RESTORE, that uses rdbLoadObjectType(), failed when a
ziplist encoded hash was loaded.
This does not affected normal RDB loading because in that case we use
the lower-level function rdbLoadType().

The commit also adds a regression test.

src/rdb.h
tests/unit/dump.tcl

index 0381c5b4c92e55baa5b4c705dd2ed061c9245f2c..37f4474564b11b18039f6afeba566aaf709e49dc 100644 (file)
--- a/src/rdb.h
+++ b/src/rdb.h
@@ -54,7 +54,7 @@
 #define REDIS_RDB_TYPE_HASH_ZIPLIST  13
 
 /* Test if a type is an object type. */
-#define rdbIsObjectType(t) ((t >= 0 && t <= 4) || (t >= 9 && t <= 12))
+#define rdbIsObjectType(t) ((t >= 0 && t <= 4) || (t >= 9 && t <= 13))
 
 /* Special RDB opcodes (saved/loaded with rdbSaveType/rdbLoadType). */
 #define REDIS_RDB_OPCODE_EXPIRETIME_MS 252
index b73cde0c17b4c335d0816ad034c7a389a4287745..be891a96f958cdc4bf84742cafc5c7746e0e3703 100644 (file)
@@ -91,6 +91,26 @@ start_server {tags {"dump"}} {
         }
     }
 
+    test {MIGRATE can correctly transfer hashes} {
+        set first [srv 0 client]
+        r del key
+        r hmset key field1 "item 1" field2 "item 2" field3 "item 3" \
+                    field4 "item 4" field5 "item 5" field6 "item 6"
+        start_server {tags {"repl"}} {
+            set second [srv 0 client]
+            set second_host [srv 0 host]
+            set second_port [srv 0 port]
+
+            assert {[$first exists key] == 1}
+            assert {[$second exists key] == 0}
+            set ret [r -1 migrate $second_host $second_port key 9 10000]
+            assert {$ret eq {OK}}
+            assert {[$first exists key] == 0}
+            assert {[$second exists key] == 1}
+            assert {[$second ttl key] == -1}
+        }
+    }
+
     test {MIGRATE timeout actually works} {
         set first [srv 0 client]
         r set key "Some Value"