]> git.saurik.com Git - redis.git/commitdiff
List type AOF rewrite using variadic RPUSH for the linked list encoding.
authorantirez <antirez@gmail.com>
Wed, 7 Dec 2011 10:34:25 +0000 (11:34 +0100)
committerantirez <antirez@gmail.com>
Tue, 13 Dec 2011 10:10:31 +0000 (11:10 +0100)
src/aof.c

index d43c741301fc8f08250c2c3b7ff193dadac14fa9..74a8a7ec82f256f146b547774fd7b346aea6218d 100644 (file)
--- a/src/aof.c
+++ b/src/aof.c
@@ -460,10 +460,16 @@ int rewriteListObject(rio *r, robj *key, robj *o) {
         while((ln = listNext(&li))) {
             robj *eleobj = listNodeValue(ln);
 
-            if (rioWriteBulkCount(r,'*',3) == 0) return 0;
-            if (rioWriteBulkString(r,"RPUSH",5) == 0) return 0;
-            if (rioWriteBulkObject(r,key) == 0) return 0;
+            if (count == 0) {
+                int cmd_items = (items > REDIS_AOFREWRITE_ITEMS_PER_CMD) ?
+                    REDIS_AOFREWRITE_ITEMS_PER_CMD : items;
+                if (rioWriteBulkCount(r,'*',2+cmd_items) == 0) return 0;
+                if (rioWriteBulkString(r,"RPUSH",5) == 0) return 0;
+                if (rioWriteBulkObject(r,key) == 0) return 0;
+            }
             if (rioWriteBulkObject(r,eleobj) == 0) return 0;
+            if (++count == REDIS_AOFREWRITE_ITEMS_PER_CMD) count = 0;
+            items--;
         }
     } else {
         redisPanic("Unknown list encoding");