From 9a8ae5a553ddf1ca3866104f12ba428c9fd0431c Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 11 Dec 2013 15:23:10 +0100 Subject: [PATCH] Replication: publish the slave_repl_offset when disconnected from master. When a slave was disconnected from its master the replication offset was reported as -1. Now it is reported as the replication offset of the previous master, so that failover can be performed using this value in order to try to select a slave with more processed data from a set of slaves of the old master. --- src/redis.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/redis.c b/src/redis.c index a8ece819..b8e0f8f5 100644 --- a/src/redis.c +++ b/src/redis.c @@ -2416,6 +2416,13 @@ sds genRedisInfoString(char *section) { "role:%s\r\n", server.masterhost == NULL ? "master" : "slave"); if (server.masterhost) { + long long slave_repl_offset = 1; + + if (server.master) + slave_repl_offset = server.master->reploff; + else if (server.cached_master) + slave_repl_offset = server.cached_master->reploff; + info = sdscatprintf(info, "master_host:%s\r\n" "master_port:%d\r\n" @@ -2430,7 +2437,7 @@ sds genRedisInfoString(char *section) { server.master ? ((int)(server.unixtime-server.master->lastinteraction)) : -1, server.repl_state == REDIS_REPL_TRANSFER, - server.master ? server.master->reploff : -1 + slave_repl_offset ); if (server.repl_state == REDIS_REPL_TRANSFER) {