]> git.saurik.com Git - redis.git/commitdiff
Now PUBLISH commands are replicated to slaves
authorantirez <antirez@gmail.com>
Fri, 2 Apr 2010 14:42:15 +0000 (16:42 +0200)
committerantirez <antirez@gmail.com>
Fri, 2 Apr 2010 14:42:15 +0000 (16:42 +0200)
redis.c
redis.conf

diff --git a/redis.c b/redis.c
index 04d8b0be4d837ccec3043ee4185831d8081c77a6..9e5bc94a933cad353596031591fa1f013efce338 100644 (file)
--- a/redis.c
+++ b/redis.c
    config file and the server is using more than maxmemory bytes of memory.
    In short this commands are denied on low memory conditions. */
 #define REDIS_CMD_DENYOOM       4
+#define REDIS_CMD_FORCE_REPLICATION 8 /* Force replication even if dirty is 0 */
 
 /* Object types */
 #define REDIS_STRING 0
@@ -829,7 +830,7 @@ static struct redisCommand cmdTable[] = {
     {"unsubscribe",unsubscribeCommand,-1,REDIS_CMD_INLINE,NULL,0,0,0},
     {"psubscribe",psubscribeCommand,-2,REDIS_CMD_INLINE,NULL,0,0,0},
     {"punsubscribe",punsubscribeCommand,-1,REDIS_CMD_INLINE,NULL,0,0,0},
-    {"publish",publishCommand,3,REDIS_CMD_BULK,NULL,0,0,0},
+    {"publish",publishCommand,3,REDIS_CMD_BULK|REDIS_CMD_FORCE_REPLICATION,NULL,0,0,0},
     {NULL,NULL,0,0,NULL,0,0,0}
 };
 
@@ -2120,9 +2121,12 @@ static void call(redisClient *c, struct redisCommand *cmd) {
 
     dirty = server.dirty;
     cmd->proc(c);
-    if (server.appendonly && server.dirty-dirty)
+    dirty = server.dirty-dirty;
+
+    if (server.appendonly && dirty)
         feedAppendOnlyFile(cmd,c->db->id,c->argv,c->argc);
-    if (server.dirty-dirty && listLength(server.slaves))
+    if ((dirty || cmd->flags & REDIS_CMD_FORCE_REPLICATION) &&
+        listLength(server.slaves))
         replicationFeedSlaves(server.slaves,c->db->id,c->argv,c->argc);
     if (listLength(server.monitors))
         replicationFeedSlaves(server.monitors,c->db->id,c->argv,c->argc);
index fc5ac59d4db487d766a418e04055585b8caa6384..095a00dead1bd17c9549e605d205456f7898873a 100644 (file)
@@ -133,7 +133,7 @@ dir ./
 # happens this is the preferred way to run Redis. If instead you care a lot
 # about your data and don't want to that a single record can get lost you should
 # enable the append only mode: when this mode is enabled Redis will append
-# every write operation received in the file appendonly.log. This file will
+# every write operation received in the file appendonly.aof. This file will
 # be read on startup in order to rebuild the full dataset in memory.
 #
 # Note that you can have both the async dumps and the append only file if you
@@ -141,7 +141,7 @@ dir ./
 # Still if append only mode is enabled Redis will load the data from the
 # log file at startup ignoring the dump.rdb file.
 #
-# The name of the append only file is "appendonly.log"
+# The name of the append only file is "appendonly.aof"
 #
 # IMPORTANT: Check the BGREWRITEAOF to check how to rewrite the append
 # log file in background when it gets too big.