Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions operator/redisfailover/service/check.go
Original file line number Diff line number Diff line change
Expand Up @@ -516,12 +516,19 @@ func (r *RedisFailoverChecker) IsHAProxyRunning(rFailover *redisfailoverv1.Redis
return err == nil && len(dp.Items) > int(rFailover.Spec.Haproxy.Replicas-1) && AreAllRunning(dp, int(rFailover.Spec.Haproxy.Replicas))
}

// IsClusterRunning returns true if all the pods in the given redisfailover are Running
func (r *RedisFailoverChecker) IsClusterRunning(rFailover *redisfailoverv1.RedisFailover) bool {
if rFailover.Bootstrapping() && !rFailover.SentinelsAllowed() {
return r.IsRedisRunning(rFailover) && r.IsHAProxyRunning(rFailover)
// IsClusterRunning returns true if all the pods in the given RedisFailover are running.
func (r *RedisFailoverChecker) IsClusterRunning(rf *redisfailoverv1.RedisFailover) bool {
if rf.Bootstrapping() {
if !rf.SentinelsAllowed() {
return r.IsRedisRunning(rf)
}
return r.IsRedisRunning(rf) && r.IsSentinelRunning(rf)
}
return r.IsSentinelRunning(rFailover) && r.IsRedisRunning(rFailover) && r.IsHAProxyRunning(rFailover)

// In normal mode, Redis, Sentinel, and HAProxy must all be running
return r.IsRedisRunning(rf) &&
r.IsSentinelRunning(rf) &&
r.IsHAProxyRunning(rf)
}

func AreAllRunning(pods *corev1.PodList, expectedRunningPods int) bool {
Expand Down
25 changes: 23 additions & 2 deletions operator/redisfailover/service/check_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ func generateRF() *redisfailoverv1.RedisFailover {
Replicas: int32(3),
Port: redisfailoverv1.Port(26379),
},
Haproxy: &redisfailoverv1.HaproxySettings{
Replicas: int32(3),
},
},
}
}
Expand Down Expand Up @@ -983,23 +986,39 @@ func TestClusterRunning(t *testing.T) {
},
}

mr := &mRedisService.Client{}

ms := &mK8SService.Services{}
ms.On("GetDeploymentPods", namespace, rfservice.GetSentinelName(rf)).Once().Return(allRunning, nil)
ms.On("GetStatefulSetPods", namespace, rfservice.GetRedisName(rf)).Once().Return(allRunning, nil)
mr := &mRedisService.Client{}

ms.On("GetDeploymentPods", namespace, rfservice.GetHaproxyMasterName(rf)).Once().Return(allRunning, nil)
checker := rfservice.NewRedisFailoverChecker(ms, mr, log.DummyLogger{}, metrics.Dummy)

assert.True(checker.IsClusterRunning(rf))

ms = &mK8SService.Services{}
ms.On("GetDeploymentPods", namespace, rfservice.GetSentinelName(rf)).Once().Return(allRunning, nil)
ms.On("GetStatefulSetPods", namespace, rfservice.GetRedisName(rf)).Once().Return(notAllReplicas, nil)
ms.On("GetDeploymentPods", namespace, rfservice.GetHaproxyMasterName(rf)).Once().Return(allRunning, nil)
checker = rfservice.NewRedisFailoverChecker(ms, mr, log.DummyLogger{}, metrics.Dummy)

assert.False(checker.IsClusterRunning(rf))

ms = &mK8SService.Services{}
ms.On("GetDeploymentPods", namespace, rfservice.GetSentinelName(rf)).Once().Return(notAllRunning, nil)
ms.On("GetStatefulSetPods", namespace, rfservice.GetRedisName(rf)).Once().Return(allRunning, nil)
ms.On("GetDeploymentPods", namespace, rfservice.GetHaproxyMasterName(rf)).Once().Return(notAllReplicas, nil)
checker = rfservice.NewRedisFailoverChecker(ms, mr, log.DummyLogger{}, metrics.Dummy)

assert.False(checker.IsClusterRunning(rf))

rf.Spec.Haproxy = nil
ms = &mK8SService.Services{}
ms.On("GetDeploymentPods", namespace, rfservice.GetSentinelName(rf)).Once().Return(allRunning, nil)
ms.On("GetStatefulSetPods", namespace, rfservice.GetRedisName(rf)).Once().Return(allRunning, nil)
checker = rfservice.NewRedisFailoverChecker(ms, mr, log.DummyLogger{}, metrics.Dummy)

assert.True(checker.IsClusterRunning(rf))
}

func TestClusterRunningWithBootstrap(t *testing.T) {
Expand Down Expand Up @@ -1090,6 +1109,8 @@ func TestClusterRunningWithBootstrap(t *testing.T) {

ms.On("GetDeploymentPods", namespace, rfservice.GetSentinelName(rf)).Once().Return(notAllRunning, nil)
ms.On("GetStatefulSetPods", namespace, rfservice.GetRedisName(rf)).Once().Return(allRunning, nil)
ms.On("GetDeploymentPods", namespace, rfservice.GetHaproxyMasterName(rf)).Once().Return(allRunning, nil)

assert.True(checker.IsClusterRunning(rf))
}

Expand Down
Loading