@@ -3,12 +3,16 @@ package rediscluster
33import (
44 "errors"
55 "fmt"
6- "github.com/ucloud/redis-operator/pkg/controller/clustercache"
76 "time"
7+
8+ redisv1beta1 "github.com/ucloud/redis-operator/pkg/apis/redis/v1beta1"
9+ "github.com/ucloud/redis-operator/pkg/controller/clustercache"
10+ "github.com/ucloud/redis-operator/pkg/util"
811)
912
1013const (
11- timeToPrepare = 2 * time .Minute
14+ checkInterval = 5 * time .Second
15+ timeOut = 30 * time .Second
1216 needRequeueMsg = "need requeue"
1317)
1418
@@ -96,6 +100,7 @@ func (r *RedisClusterHandler) CheckAndHeal(meta *clustercache.Meta) error {
96100 }
97101 }
98102 }
103+ // TODO: check sentinel's number
99104 //for _, sip := range sentinels {
100105 // if err := r.rcChecker.CheckSentinelNumberInMemory(sip, meta.Obj, meta.Auth); err != nil {
101106 // r.logger.WithValues("namespace", meta.Obj.Namespace, "name", meta.Obj.Name).Info(err.Error())
@@ -111,7 +116,10 @@ func (r *RedisClusterHandler) CheckAndHeal(meta *clustercache.Meta) error {
111116 if err := r .rcHealer .RestoreSentinel (sip , meta .Auth ); err != nil {
112117 return err
113118 }
114- return needRequeueErr
119+ if err := r .waitRestoreSentinelOK (sip , meta .Obj , meta .Auth ); err != nil {
120+ r .logger .WithValues ("namespace" , meta .Obj .Namespace , "name" , meta .Obj .Name ).Info (err .Error ())
121+ return err
122+ }
115123 }
116124 }
117125
@@ -152,3 +160,21 @@ func (r *RedisClusterHandler) setSentinelConfig(meta *clustercache.Meta, sentine
152160 }
153161 return nil
154162}
163+
164+ func (r * RedisClusterHandler ) waitRestoreSentinelOK (sentinel string , rc * redisv1beta1.RedisCluster , auth * util.AuthConfig ) error {
165+ timer := time .NewTimer (timeOut )
166+ defer timer .Stop ()
167+ for {
168+ select {
169+ case <- timer .C :
170+ return fmt .Errorf ("wait for resetore sentinel timeout" )
171+ default :
172+ if err := r .rcChecker .CheckSentinelSlavesNumberInMemory (sentinel , rc , auth ); err != nil {
173+ r .logger .WithValues ("namespace" , rc .Namespace , "name" , rc .Name ).Info (err .Error ())
174+ time .Sleep (checkInterval )
175+ } else {
176+ return nil
177+ }
178+ }
179+ }
180+ }
0 commit comments