Skip to content

Commit

Permalink
Sentinel: Sentinel-side support for slave priority.
Browse files Browse the repository at this point in the history
The slave priority that is now published by Redis in INFO output is
now used by Sentinel in order to select the slave with minimum priority
for promotion, and in order to consider slaves with priority set to 0 as
not able to play the role of master (they will never be promoted by
Sentinel).

The "slave-priority" field is now one of the fileds that Sentinel
publishes when describing an instance via the SENTINEL commands such as
"SENTINEL slaves mastername".
  • Loading branch information
antirez committed Aug 28, 2012
1 parent 169a44c commit 3ec701e
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/sentinel.c
Original file line number Diff line number Diff line change
Expand Up @@ -1410,6 +1410,10 @@ void sentinelRefreshInstanceInfo(sentinelRedisInstance *ri, const char *info) {
SENTINEL_MASTER_LINK_STATUS_UP :
SENTINEL_MASTER_LINK_STATUS_DOWN;
}

/* slave_priority:<priority> */
if (sdslen(l) >= 15 && !memcmp(l,"slave_priority:",15))
ri->slave_priority = atoi(l+15);
}
}
ri->info_refresh = mstime();
Expand Down Expand Up @@ -1882,6 +1886,10 @@ void addReplySentinelRedisInstance(redisClient *c, sentinelRedisInstance *ri) {
addReplyBulkCString(c,"master-port");
addReplyBulkLongLong(c,ri->slave_master_port);
fields++;

addReplyBulkCString(c,"slave-priority");
addReplyBulkLongLong(c,ri->slave_priority);
fields++;
}

/* Only sentinels */
Expand Down Expand Up @@ -2439,6 +2447,7 @@ void sentinelStartFailoverIfNeeded(sentinelRedisInstance *master) {
* 3) info_refresh more recent than SENTINEL_INFO_VALIDITY_TIME.
* 4) master_link_down_time no more than:
* (now - master->s_down_since_time) + (master->down_after_period * 10).
* 5) Slave priority can't be zero, otherwise the slave is discareded.
*
* Among all the slaves matching the above conditions we select the slave
* with lower slave_priority. If priority is the same we select the slave
Expand Down Expand Up @@ -2476,6 +2485,7 @@ sentinelRedisInstance *sentinelSelectSlave(sentinelRedisInstance *master) {

if (slave->flags & (SRI_S_DOWN|SRI_O_DOWN|SRI_DISCONNECTED)) continue;
if (slave->last_avail_time < info_validity_time) continue;
if (slave->slave_priority == 0) continue;

/* If the master is in SDOWN state we get INFO for slaves every second.
* Otherwise we get it with the usual period so we need to account for
Expand Down

0 comments on commit 3ec701e

Please sign in to comment.