]> git.saurik.com Git - redis.git/commitdiff
BGREWRITEAOF now works with swapping on
authorantirez <antirez@gmail.com>
Wed, 6 Jan 2010 00:15:15 +0000 (19:15 -0500)
committerantirez <antirez@gmail.com>
Wed, 6 Jan 2010 00:15:15 +0000 (19:15 -0500)
redis.c
redis.conf

diff --git a/redis.c b/redis.c
index 55a9ff9cdc1f2edcc53f96cf559c3448b8e630b7..d8243b6b67c4924bc91511d02faab9f158d2e1bf 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -6527,9 +6527,20 @@ static int rewriteAppendOnlyFile(char *filename) {
 
         /* Iterate this DB writing every entry */
         while((de = dictNext(di)) != NULL) {
-            robj *key = dictGetEntryKey(de);
-            robj *o = dictGetEntryVal(de);
-            time_t expiretime = getExpire(db,key);
+            robj *key, *o;
+            time_t expiretime;
+            int swapped;
+
+            key = dictGetEntryKey(de);
+            if (key->storage == REDIS_VM_MEMORY) {
+                o = dictGetEntryVal(de);
+                swapped = 0;
+            } else {
+                o = vmPreviewObject(key);
+                key = dupStringObject(key);
+                swapped = 1;
+            }
+            expiretime = getExpire(db,key);
 
             /* Save the key and associated value */
             if (o->type == REDIS_STRING) {
@@ -6597,6 +6608,12 @@ static int rewriteAppendOnlyFile(char *filename) {
                 if (fwriteBulk(fp,key) == 0) goto werr;
                 if (fwriteBulkLong(fp,expiretime) == 0) goto werr;
             }
+            /* We created a few temp objects if the key->value pair
+             * was about a swapped out object. Free both. */
+            if (swapped) {
+                decrRefCount(key);
+                decrRefCount(o);
+            }
         }
         dictReleaseIterator(di);
     }
index 9fca2ffaa7eeba680eb1ad2d57c9383073d8159d..696635210acc7395f804989058bf1fd52f9645cd 100644 (file)
@@ -49,9 +49,12 @@ databases 16
 #   after 900 sec (15 min) if at least 1 key changed
 #   after 300 sec (5 min) if at least 10 keys changed
 #   after 60 sec if at least 10000 keys changed
-save 900 1
-save 300 10
-save 60 10000
+#
+#   Note: you can disable saving at all commenting all the "save" lines.
+
+#save 900 1
+#save 300 10
+#save 60 10000
 
 # Compress string objects using LZF when dump .rdb databases?
 # For default that's set to 'yes' as it's almost always a win.