Now PUBLISH commands are replicated to slaves

This commit is contained in:
antirez 2010-04-02 16:42:15 +02:00
parent 8bca8773b4
commit 4005fef124
2 changed files with 9 additions and 5 deletions

10
redis.c
View File

@ -111,6 +111,7 @@
config file and the server is using more than maxmemory bytes of memory. config file and the server is using more than maxmemory bytes of memory.
In short this commands are denied on low memory conditions. */ In short this commands are denied on low memory conditions. */
#define REDIS_CMD_DENYOOM 4 #define REDIS_CMD_DENYOOM 4
#define REDIS_CMD_FORCE_REPLICATION 8 /* Force replication even if dirty is 0 */
/* Object types */ /* Object types */
#define REDIS_STRING 0 #define REDIS_STRING 0
@ -829,7 +830,7 @@ static struct redisCommand cmdTable[] = {
{"unsubscribe",unsubscribeCommand,-1,REDIS_CMD_INLINE,NULL,0,0,0}, {"unsubscribe",unsubscribeCommand,-1,REDIS_CMD_INLINE,NULL,0,0,0},
{"psubscribe",psubscribeCommand,-2,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}, {"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} {NULL,NULL,0,0,NULL,0,0,0}
}; };
@ -2120,9 +2121,12 @@ static void call(redisClient *c, struct redisCommand *cmd) {
dirty = server.dirty; dirty = server.dirty;
cmd->proc(c); 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); 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); replicationFeedSlaves(server.slaves,c->db->id,c->argv,c->argc);
if (listLength(server.monitors)) if (listLength(server.monitors))
replicationFeedSlaves(server.monitors,c->db->id,c->argv,c->argc); replicationFeedSlaves(server.monitors,c->db->id,c->argv,c->argc);

View File

@ -133,7 +133,7 @@ dir ./
# happens this is the preferred way to run Redis. If instead you care a lot # 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 # 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 # 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. # 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 # 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 # Still if append only mode is enabled Redis will load the data from the
# log file at startup ignoring the dump.rdb file. # 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 # IMPORTANT: Check the BGREWRITEAOF to check how to rewrite the append
# log file in background when it gets too big. # log file in background when it gets too big.