]> git.saurik.com Git - redis.git/blobdiff - src/replication.c
AOF fixes in the context of replicaiton (when AOF is used by slave) and CONFIG SET...
[redis.git] / src / replication.c
index 30df9bc82cc128e141c1999eac97210e9b2364be..2be03c1b49d08a316d83056b1ebae36cbcca2579 100644 (file)
@@ -358,8 +358,22 @@ void readSyncBulkPayload(aeEventLoop *el, int fd, void *privdata, int mask) {
         server.master->authenticated = 1;
         server.replstate = REDIS_REPL_CONNECTED;
         redisLog(REDIS_NOTICE, "MASTER <-> SLAVE sync: Finished with success");
-        /* Rewrite the AOF file now that the dataset changed. */
-        if (server.appendonly) rewriteAppendOnlyFileBackground();
+        /* Restart the AOF subsystem now that we finished the sync. This
+         * will trigger an AOF rewrite, and when done will start appending
+         * to the new file. */
+        if (server.appendonly) {
+            int retry = 10;
+
+            stopAppendOnly();
+            while (retry-- && startAppendOnly() == REDIS_ERR) {
+                redisLog(REDIS_WARNING,"Failed enabling the AOF after successful master synchrnization! Trying it again in one second.");
+                sleep(1);
+            }
+            if (!retry) {
+                redisLog(REDIS_WARNING,"FATAL: this slave instance finished the synchronization with its master, but the AOF can't be turned on. Exiting now.");
+                exit(1);
+            }
+        }
     }
 
     return;