summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2013-12-11 15:23:10 +0100
committerantirez <antirez@gmail.com>2013-12-11 15:24:50 +0100
commit9a8ae5a553ddf1ca3866104f12ba428c9fd0431c (patch)
treea3f0de13b7454372178cb184b0e2b6aaf09ed203
parent0ff078d8d07c98f7c38af8858b4ec29c5623e7b2 (diff)
downloadredis-9a8ae5a553ddf1ca3866104f12ba428c9fd0431c.tar.gz
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.
-rw-r--r--src/redis.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/redis.c b/src/redis.c
index a8ece8197..b8e0f8f5c 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) {