@@ -30,7 +30,7 @@ type syncContext struct {
3030
3131func (r * ReconcileDistributedRedisCluster ) ensureCluster (ctx * syncContext ) error {
3232 cluster := ctx .cluster
33- if err := r .validate (cluster , ctx .reqLogger ); err != nil {
33+ if err := r .validateAndSetDefault (cluster , ctx .reqLogger ); err != nil {
3434 if k8sutil .IsRequestRetryable (err ) {
3535 return Kubernetes .Wrap (err , "Validate" )
3636 }
@@ -89,16 +89,22 @@ func (r *ReconcileDistributedRedisCluster) waitPodReady(ctx *syncContext) error
8989 return nil
9090}
9191
92- func (r * ReconcileDistributedRedisCluster ) validate (cluster * redisv1alpha1.DistributedRedisCluster , reqLogger logr.Logger ) error {
92+ func (r * ReconcileDistributedRedisCluster ) validateAndSetDefault (cluster * redisv1alpha1.DistributedRedisCluster , reqLogger logr.Logger ) error {
9393 var update bool
9494 var err error
9595
96- if cluster .IsRestoreFromBackup () && ! cluster .IsRestored () {
97- update , err = r .validateRestore (cluster , reqLogger )
96+ if cluster .IsRestoreFromBackup () && cluster .ShouldInitRestorePhase () {
97+ update , err = r .initRestore (cluster , reqLogger )
9898 if err != nil {
9999 return err
100100 }
101101 }
102+
103+ if cluster .IsRestoreFromBackup () && (cluster .IsRestoreRunning () || cluster .IsRestoreRestarting ()) {
104+ // Set ClusterReplicas = 0, only start master node in first reconcile loop when do restore
105+ cluster .Spec .ClusterReplicas = 0
106+ }
107+
102108 updateDefault := cluster .DefaultSpec (reqLogger )
103109 if update || updateDefault {
104110 return r .crController .UpdateCR (cluster )
@@ -116,7 +122,7 @@ func dbLoadedFromDiskWhenRestore(cluster *redisv1alpha1.DistributedRedisCluster,
116122 }
117123}
118124
119- func (r * ReconcileDistributedRedisCluster ) validateRestore (cluster * redisv1alpha1.DistributedRedisCluster , reqLogger logr.Logger ) (bool , error ) {
125+ func (r * ReconcileDistributedRedisCluster ) initRestore (cluster * redisv1alpha1.DistributedRedisCluster , reqLogger logr.Logger ) (bool , error ) {
120126 update := false
121127 if cluster .Status .Restore .Backup == nil {
122128 initSpec := cluster .Spec .Init
@@ -130,6 +136,10 @@ func (r *ReconcileDistributedRedisCluster) validateRestore(cluster *redisv1alpha
130136 return update , fmt .Errorf ("backup is still running" )
131137 }
132138 cluster .Status .Restore .Backup = backup
139+ cluster .Status .Restore .Phase = redisv1alpha1 .RestorePhaseRunning
140+ if err := r .crController .UpdateCRStatus (cluster ); err != nil {
141+ return update , err
142+ }
133143 }
134144 backup := cluster .Status .Restore .Backup
135145 if cluster .Spec .Image == "" {
@@ -140,8 +150,7 @@ func (r *ReconcileDistributedRedisCluster) validateRestore(cluster *redisv1alpha
140150 cluster .Spec .MasterSize = backup .Status .MasterSize
141151 update = true
142152 }
143- // Set ClusterReplicas = 0, only start master node in first reconcile loop when do restore
144- cluster .Spec .ClusterReplicas = 0
153+
145154 return update , nil
146155}
147156
0 commit comments