]> git.saurik.com Git - redis.git/commitdiff
Fix: when aof_write_rewrite is true don't append on the AOF buffer but accumulate...
authorantirez <antirez@gmail.com>
Thu, 15 Dec 2011 19:03:28 +0000 (20:03 +0100)
committerantirez <antirez@gmail.com>
Thu, 15 Dec 2011 19:03:28 +0000 (20:03 +0100)
src/aof.c

index 4d34209183da755681a305804a4ca4df0483e60b..15a456f9de00269d4402682e1cfa39b112240314 100644 (file)
--- a/src/aof.c
+++ b/src/aof.c
@@ -224,15 +224,9 @@ sds catAppendOnlyExpireAtCommand(sds buf, struct redisCommand *cmd, robj *key, r
 }
 
 void feedAppendOnlyFile(struct redisCommand *cmd, int dictid, robj **argv, int argc) {
-    sds buf;
+    sds buf = sdsempty();
     robj *tmpargv[3];
 
-    /* Return ASAP if we are writing a rewrite to finish in order to start
-     * appending to the Append Only File. */
-    if (server.aof_wait_rewrite) return;
-
-    buf = sdsempty();
-
     /* The DB this command was targetting is not the same as the last command
      * we appendend. To issue a SELECT command is needed. */
     if (dictid != server.appendseldb) {
@@ -265,8 +259,15 @@ void feedAppendOnlyFile(struct redisCommand *cmd, int dictid, robj **argv, int a
 
     /* Append to the AOF buffer. This will be flushed on disk just before
      * of re-entering the event loop, so before the client will get a
-     * positive reply about the operation performed. */
-    server.aofbuf = sdscatlen(server.aofbuf,buf,sdslen(buf));
+     * positive reply about the operation performed.
+     *
+     * Note, we don't add stuff in the AOF buffer if aof_wait_rewrite is
+     * non zero, as this means we are starting with a new AOF and the
+     * current one is meaningless (this happens for instance after
+     * a slave resyncs with its master). */
+    if (!server.aof_wait_rewrite) {
+        server.aofbuf = sdscatlen(server.aofbuf,buf,sdslen(buf));
+    }
 
     /* If a background append only file rewriting is in progress we want to
      * accumulate the differences between the child DB and the current one