Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
0101c2bc
Commit
0101c2bc
authored
Nov 20, 2013
by
antirez
Browse files
Sentinel: select slave with best (greater) replication offset.
parent
a6ebd910
Changes
1
Show whitespace changes
Inline
Side-by-side
src/sentinel.c
View file @
0101c2bc
...
@@ -2903,6 +2903,9 @@ int sentinelStartFailoverIfNeeded(sentinelRedisInstance *master) {
...
@@ -2903,6 +2903,9 @@ int sentinelStartFailoverIfNeeded(sentinelRedisInstance *master) {
* NULL if no suitable slave was found.
* NULL if no suitable slave was found.
*/
*/
/* Helper for sentinelSelectSlave(). This is used by qsort() in order to
* sort suitable slaves in a "better first" order, to take the first of
* the list. */
int
compareSlavesForPromotion
(
const
void
*
a
,
const
void
*
b
)
{
int
compareSlavesForPromotion
(
const
void
*
a
,
const
void
*
b
)
{
sentinelRedisInstance
**
sa
=
(
sentinelRedisInstance
**
)
a
,
sentinelRedisInstance
**
sa
=
(
sentinelRedisInstance
**
)
a
,
**
sb
=
(
sentinelRedisInstance
**
)
b
;
**
sb
=
(
sentinelRedisInstance
**
)
b
;
...
@@ -2911,8 +2914,16 @@ int compareSlavesForPromotion(const void *a, const void *b) {
...
@@ -2911,8 +2914,16 @@ int compareSlavesForPromotion(const void *a, const void *b) {
if
((
*
sa
)
->
slave_priority
!=
(
*
sb
)
->
slave_priority
)
if
((
*
sa
)
->
slave_priority
!=
(
*
sb
)
->
slave_priority
)
return
(
*
sa
)
->
slave_priority
-
(
*
sb
)
->
slave_priority
;
return
(
*
sa
)
->
slave_priority
-
(
*
sb
)
->
slave_priority
;
/* If priority is the same, select the slave with that has the
/* If priority is the same, select the slave with greater replication
* lexicographically smaller runid. Note that we try to handle runid
* offset (processed more data frmo the master). */
if
((
*
sa
)
->
slave_repl_offset
>
(
*
sb
)
->
slave_repl_offset
)
{
return
-
1
;
/* a < b */
}
else
if
((
*
sa
)
->
slave_repl_offset
<
(
*
sb
)
->
slave_repl_offset
)
{
return
1
;
/* b > a */
}
/* If the replication offset is the same select the slave with that has
* the lexicographically smaller runid. Note that we try to handle runid
* == NULL as there are old Redis versions that don't publish runid in
* == NULL as there are old Redis versions that don't publish runid in
* INFO. A NULL runid is considered bigger than any other runid. */
* INFO. A NULL runid is considered bigger than any other runid. */
sa_runid
=
(
*
sa
)
->
runid
;
sa_runid
=
(
*
sa
)
->
runid
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment