Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4bea2da

Browse files
feature: ignore slave whose slave-priority = 0
1 parent f4cf6ef commit 4bea2da

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

‎pkg/apis/redis/v1beta1/validate.go‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ const (
1414
defaultRedisNumber = 3
1515
defaultSentinelNumber = 3
1616
defaultRedisImage = "redis:5.0.4-alpine"
17+
18+
defaultSlavePriority = "1"
1719
)
1820

1921
var (
@@ -29,7 +31,7 @@ func (r *RedisCluster) Validate() error {
2931
if r.Spec.Size == 0 {
3032
r.Spec.Size = defaultRedisNumber
3133
} else if r.Spec.Size < defaultRedisNumber {
32-
return errors.New("number of redises in spec is less than the minimum")
34+
return errors.New("number of redis in spec is less than the minimum")
3335
}
3436

3537
if r.Spec.Sentinel.Replicas == 0 {
@@ -54,6 +56,9 @@ func (r *RedisCluster) Validate() error {
5456
r.Spec.Config = make(map[string]string)
5557
}
5658

59+
// https://github.com/ucloud/redis-operator/issues/6
60+
r.Spec.Config["slave-priority"] = defaultSlavePriority
61+
5762
if !r.Spec.DisablePersistence {
5863
enablePersistence(r.Spec.Config)
5964
} else {

‎pkg/client/redis/client.go‎

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55
"fmt"
66
"net"
7+
"reflect"
78
"regexp"
89
"strconv"
910
"strings"
@@ -92,17 +93,25 @@ func (c *client) GetNumberSentinelSlavesInMemory(ip string, auth *util.AuthConfi
9293
return 0, err
9394
}
9495

95-
if err2 := isSentinelReady(info); err2 != nil {
96-
return 0, err2
97-
}
98-
match := slaveNumberRE.FindStringSubmatch(info)
99-
if len(match) == 0 {
100-
return 0, errors.New("slaves regex not found")
96+
if err = isSentinelReady(info); err != nil {
97+
return 0, err
10198
}
102-
nSlaves, err := strconv.Atoi(match[1])
99+
100+
cmd := rediscli.NewSliceCmd("sentinel", "slaves", masterName)
101+
rClient.Process(cmd)
102+
slaveInfoBlobs, err := cmd.Result()
103103
if err != nil {
104104
return 0, err
105105
}
106+
nSlaves := len(slaveInfoBlobs)
107+
for _, slaveInfoBlob := range slaveInfoBlobs {
108+
slaveInfo := reflect.ValueOf(slaveInfoBlob)
109+
slavePriority := fmt.Sprintf("%+v", slaveInfo.Index(37))
110+
if slavePriority == "0" {
111+
nSlaves -= 1
112+
}
113+
}
114+
106115
return int32(nSlaves), nil
107116
}
108117

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /