@@ -19,6 +19,7 @@ package rediscluster
1919import (
2020 "context"
2121 "fmt"
22+ "reflect"
2223 "time"
2324
2425 rcvb2 "github.com/OT-CONTAINER-KIT/redis-operator/api/rediscluster/v1beta2"
@@ -131,7 +132,12 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
131132 // Mark the cluster status as initializing if there are no leader or follower nodes
132133 if (instance .Status .ReadyLeaderReplicas == 0 && instance .Status .ReadyFollowerReplicas == 0 ) ||
133134 instance .Status .ReadyLeaderReplicas != leaderReplicas {
134- err = k8sutils .UpdateRedisClusterStatus (ctx , instance , rcvb2 .RedisClusterInitializing , rcvb2 .InitializingClusterLeaderReason , instance .Status .ReadyLeaderReplicas , instance .Status .ReadyFollowerReplicas , r .Client )
135+ err = r .updateStatus (ctx , instance , rcvb2.RedisClusterStatus {
136+ State : rcvb2 .RedisClusterInitializing ,
137+ Reason : rcvb2 .InitializingClusterLeaderReason ,
138+ ReadyLeaderReplicas : instance .Status .ReadyLeaderReplicas ,
139+ ReadyFollowerReplicas : instance .Status .ReadyFollowerReplicas ,
140+ })
135141 if err != nil {
136142 return intctrlutil .RequeueE (ctx , err , "" )
137143 }
@@ -157,7 +163,12 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
157163 // Mark the cluster status as initializing if there are no follower nodes
158164 if (instance .Status .ReadyLeaderReplicas == 0 && instance .Status .ReadyFollowerReplicas == 0 ) ||
159165 instance .Status .ReadyFollowerReplicas != followerReplicas {
160- err = k8sutils .UpdateRedisClusterStatus (ctx , instance , rcvb2 .RedisClusterInitializing , rcvb2 .InitializingClusterFollowerReason , leaderReplicas , instance .Status .ReadyFollowerReplicas , r .Client )
166+ err = r .updateStatus (ctx , instance , rcvb2.RedisClusterStatus {
167+ State : rcvb2 .RedisClusterInitializing ,
168+ Reason : rcvb2 .InitializingClusterFollowerReason ,
169+ ReadyLeaderReplicas : leaderReplicas ,
170+ ReadyFollowerReplicas : instance .Status .ReadyFollowerReplicas ,
171+ })
161172 if err != nil {
162173 return intctrlutil .RequeueE (ctx , err , "" )
163174 }
@@ -185,7 +196,12 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
185196
186197 // Mark the cluster status as bootstrapping if all the leader and follower nodes are ready
187198 if instance .Status .ReadyLeaderReplicas != leaderReplicas || instance .Status .ReadyFollowerReplicas != followerReplicas {
188- err = k8sutils .UpdateRedisClusterStatus (ctx , instance , rcvb2 .RedisClusterBootstrap , rcvb2 .BootstrapClusterReason , leaderReplicas , followerReplicas , r .Client )
199+ err = r .updateStatus (ctx , instance , rcvb2.RedisClusterStatus {
200+ State : rcvb2 .RedisClusterBootstrap ,
201+ Reason : rcvb2 .BootstrapClusterReason ,
202+ ReadyLeaderReplicas : leaderReplicas ,
203+ ReadyFollowerReplicas : followerReplicas ,
204+ })
189205 if err != nil {
190206 return intctrlutil .RequeueE (ctx , err , "" )
191207 }
@@ -238,7 +254,12 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
238254 logger .Error (err , "failed to determine unhealthy node count in cluster" )
239255 }
240256 if int (totalReplicas ) > 1 && unhealthyNodeCount > 0 {
241- err = k8sutils .UpdateRedisClusterStatus (ctx , instance , rcvb2 .RedisClusterFailed , "RedisCluster has unhealthy nodes" , leaderReplicas , followerReplicas , r .Client )
257+ err = r .updateStatus (ctx , instance , rcvb2.RedisClusterStatus {
258+ State : rcvb2 .RedisClusterFailed ,
259+ Reason : "RedisCluster has unhealthy nodes" ,
260+ ReadyLeaderReplicas : leaderReplicas ,
261+ ReadyFollowerReplicas : followerReplicas ,
262+ })
242263 if err != nil {
243264 return intctrlutil .RequeueE (ctx , err , "" )
244265 }
@@ -289,7 +310,12 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
289310 return intctrlutil .RequeueE (ctx , err , "failed to set dynamic config" )
290311 }
291312
292- err = k8sutils .UpdateRedisClusterStatus (ctx , instance , rcvb2 .RedisClusterReady , rcvb2 .ReadyClusterReason , leaderReplicas , followerReplicas , r .Client )
313+ err = r .updateStatus (ctx , instance , rcvb2.RedisClusterStatus {
314+ State : rcvb2 .RedisClusterReady ,
315+ Reason : rcvb2 .ReadyClusterReason ,
316+ ReadyLeaderReplicas : leaderReplicas ,
317+ ReadyFollowerReplicas : followerReplicas ,
318+ })
293319 if err != nil {
294320 return intctrlutil .RequeueE (ctx , err , "" )
295321 }
@@ -306,6 +332,16 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
306332 return intctrlutil .RequeueAfter (ctx , time .Second * 10 , "" )
307333}
308334
335+ func (r * Reconciler ) updateStatus (ctx context.Context , rc * rcvb2.RedisCluster , status rcvb2.RedisClusterStatus ) error {
336+ if reflect .DeepEqual (rc .Status , status ) {
337+ return nil
338+ }
339+ copy := rc .DeepCopy ()
340+ copy .Spec = rcvb2.RedisClusterSpec {}
341+ copy .Status = status
342+ return common .UpdateStatus (ctx , r .Client , copy )
343+ }
344+
309345// SetupWithManager sets up the controller with the Manager.
310346func (r * Reconciler ) SetupWithManager (mgr ctrl.Manager , opts controller.Options ) error {
311347 return ctrl .NewControllerManagedBy (mgr ).
0 commit comments