Skip to content

Commit db5fdce

Browse files
authored
Metal 3611 - Refactor phase structure for db and dbin (#165)
1 parent ed440c4 commit db5fdce

File tree

2 files changed

+40
-72
lines changed

2 files changed

+40
-72
lines changed

controllers/database_controller.go

Lines changed: 32 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,6 @@ func (r *DatabaseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
175175
return r.manageError(ctx, dbcr, err, true)
176176
}
177177
logrus.Infof("DB: namespace=%s, name=%s initialized", dbcr.Namespace, dbcr.Name)
178-
return reconcileResult, nil
179178
}
180179

181180
// database status not true, process phase
@@ -184,67 +183,46 @@ func (r *DatabaseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
184183
logrus.Infof("DB: namespace=%s, name=%s start %s", dbcr.Namespace, dbcr.Name, phase)
185184

186185
defer promDBsPhaseTime.WithLabelValues(phase).Observe(kci.TimeTrack(time.Now()))
187-
188-
switch phase {
189-
case dbPhaseCreate:
190-
err := r.createDatabase(ctx, dbcr)
191-
if err != nil {
192-
// when database creation failed, don't requeue request. to prevent exceeding api limit (ex: against google api)
193-
return r.manageError(ctx, dbcr, err, false)
194-
}
195-
dbcr.Status.Phase = dbPhaseInstanceAccessSecret
196-
case dbPhaseInstanceAccessSecret:
197-
err := r.createInstanceAccessSecret(ctx, dbcr)
198-
if err != nil {
199-
return r.manageError(ctx, dbcr, err, true)
200-
}
201-
dbcr.Status.Phase = dbPhaseProxy
202-
case dbPhaseProxy:
203-
err := r.createProxy(ctx, dbcr)
204-
if err != nil {
205-
return r.manageError(ctx, dbcr, err, true)
206-
}
207-
dbcr.Status.Phase = dbPhaseSecretsTemplating
208-
case dbPhaseSecretsTemplating:
209-
err := r.createTemplatedSecrets(ctx, dbcr)
210-
if err != nil {
211-
return r.manageError(ctx, dbcr, err, true)
212-
}
213-
dbcr.Status.Phase = dbPhaseConfigMap
214-
case dbPhaseConfigMap:
215-
err := r.createInfoConfigMap(ctx, dbcr)
216-
if err != nil {
217-
return r.manageError(ctx, dbcr, err, true)
218-
}
219-
dbcr.Status.Phase = dbPhaseBackupJob
220-
case dbPhaseBackupJob:
221-
err := r.createBackupJob(ctx, dbcr)
222-
if err != nil {
223-
return r.manageError(ctx, dbcr, err, true)
224-
}
225-
dbcr.Status.Phase = dbPhaseFinish
226-
case dbPhaseFinish:
227-
dbcr.Status.Status = true
228-
dbcr.Status.Phase = dbPhaseReady
229-
case dbPhaseReady:
230-
return reconcileResult, nil // do nothing and don't requeue
231-
default:
232-
logrus.Errorf("DB: namespace=%s, name=%s unknown phase %s", dbcr.Namespace, dbcr.Name, phase)
233-
err := r.initialize(ctx, dbcr)
234-
if err != nil {
235-
return r.manageError(ctx, dbcr, err, true)
236-
} // set phase to initial state
237-
return r.manageError(ctx, dbcr, errors.New("unknown phase"), false)
186+
err := r.createDatabase(ctx, dbcr)
187+
if err != nil {
188+
// when database creation failed, don't requeue request. to prevent exceeding api limit (ex: against google api)
189+
return r.manageError(ctx, dbcr, err, false)
190+
}
191+
dbcr.Status.Phase = dbPhaseInstanceAccessSecret
192+
err = r.createInstanceAccessSecret(ctx, dbcr)
193+
if err != nil {
194+
return r.manageError(ctx, dbcr, err, true)
238195
}
196+
dbcr.Status.Phase = dbPhaseProxy
197+
err = r.createProxy(ctx, dbcr)
198+
if err != nil {
199+
return r.manageError(ctx, dbcr, err, true)
200+
}
201+
dbcr.Status.Phase = dbPhaseSecretsTemplating
202+
err = r.createTemplatedSecrets(ctx, dbcr)
203+
if err != nil {
204+
return r.manageError(ctx, dbcr, err, true)
205+
}
206+
dbcr.Status.Phase = dbPhaseConfigMap
207+
err = r.createInfoConfigMap(ctx, dbcr)
208+
if err != nil {
209+
return r.manageError(ctx, dbcr, err, true)
210+
}
211+
dbcr.Status.Phase = dbPhaseBackupJob
212+
err = r.createBackupJob(ctx, dbcr)
213+
if err != nil {
214+
return r.manageError(ctx, dbcr, err, true)
215+
}
216+
dbcr.Status.Phase = dbPhaseFinish
217+
dbcr.Status.Status = true
218+
dbcr.Status.Phase = dbPhaseReady
239219

240220
err = r.Status().Update(ctx, dbcr)
241221
if err != nil {
242222
logrus.Errorf("error status subresource updating - %s", err)
243223
return r.manageError(ctx, dbcr, err, true)
244224
}
245-
246225
logrus.Infof("DB: namespace=%s, name=%s finish %s", dbcr.Namespace, dbcr.Name, phase)
247-
return reconcile.Result{Requeue: true}, nil // success phase, but not done ... requeue for next step
248226
}
249227

250228
// status true do nothing and don't requeue

controllers/dbinstance_controller.go

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,7 @@ func (r *DbInstanceReconciler) Reconcile(ctx context.Context, req ctrl.Request)
104104
logrus.Infof("Instance: name=%s %s", dbin.Name, phase)
105105
defer promDBInstancesPhaseTime.WithLabelValues(phase).Observe(time.Since(time.Now()).Seconds())
106106
promDBInstancesPhase.WithLabelValues(dbin.Name).Set(dbInstancePhaseToFloat64(phase))
107-
108-
switch phase {
109-
case dbInstancePhaseValidate:
110-
dbin.Status.Status = false
107+
if !dbin.Status.Status {
111108
if err := dbin.ValidateBackend(); err != nil {
112109
return reconcileResult, err
113110
}
@@ -119,37 +116,30 @@ func (r *DbInstanceReconciler) Reconcile(ctx context.Context, req ctrl.Request)
119116
addDBInstanceChecksumStatus(ctx, dbin)
120117
dbin.Status.Phase = dbInstancePhaseCreate
121118
dbin.Status.Info = map[string]string{}
122-
case dbInstancePhaseCreate:
123-
err := r.create(ctx, dbin)
119+
120+
err = r.create(ctx, dbin)
124121
if err != nil {
125122
logrus.Errorf("Instance: name=%s instance creation failed - %s", dbin.Name, err)
126123
return reconcileResult, nil // failed but don't requeue the request. retry by changing spec or config
127124
}
128125
dbin.Status.Status = true
129126
dbin.Status.Phase = dbInstancePhaseBroadcast
130-
case dbInstancePhaseBroadcast:
131-
err := r.broadcast(ctx, dbin)
127+
128+
err = r.broadcast(ctx, dbin)
132129
if err != nil {
133130
logrus.Errorf("Instance: name=%s broadcasting failed - %s", dbin.Name, err)
134131
return reconcileResult, err
135132
}
136133
dbin.Status.Phase = dbInstancePhaseProxyCreate
137-
case dbInstancePhaseProxyCreate:
138-
err := r.createProxy(ctx, dbin)
134+
135+
err = r.createProxy(ctx, dbin)
139136
if err != nil {
140137
logrus.Errorf("Instance: name=%s proxy creation failed - %s", dbin.Name, err)
141138
return reconcileResult, err
142139
}
143140
dbin.Status.Phase = dbInstancePhaseRunning
144-
case dbInstancePhaseRunning:
145-
return reconcileResult, nil // do nothing and don't requeue
146-
default:
147-
logrus.Errorf("Instance: name=%s unknown phase %s", dbin.Name, phase)
148-
dbin.Status.Phase = dbInstancePhaseValidate // set phase to initial state
149-
return reconcileResult, errors.New("unknown phase")
150-
}
151141

152-
// dbinstance created successfully - don't requeue
142+
}
153143
return reconcileResult, nil
154144
}
155145

0 commit comments

Comments
 (0)