Skip to content

Commit

Permalink
Metal 3611 - Refactor phase structure for db and dbin (#165)
Browse files Browse the repository at this point in the history
  • Loading branch information
allanger authored Nov 29, 2022
1 parent ed440c4 commit db5fdce
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 72 deletions.
86 changes: 32 additions & 54 deletions controllers/database_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,6 @@ func (r *DatabaseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
return r.manageError(ctx, dbcr, err, true)
}
logrus.Infof("DB: namespace=%s, name=%s initialized", dbcr.Namespace, dbcr.Name)
return reconcileResult, nil
}

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

defer promDBsPhaseTime.WithLabelValues(phase).Observe(kci.TimeTrack(time.Now()))

switch phase {
case dbPhaseCreate:
err := r.createDatabase(ctx, dbcr)
if err != nil {
// when database creation failed, don't requeue request. to prevent exceeding api limit (ex: against google api)
return r.manageError(ctx, dbcr, err, false)
}
dbcr.Status.Phase = dbPhaseInstanceAccessSecret
case dbPhaseInstanceAccessSecret:
err := r.createInstanceAccessSecret(ctx, dbcr)
if err != nil {
return r.manageError(ctx, dbcr, err, true)
}
dbcr.Status.Phase = dbPhaseProxy
case dbPhaseProxy:
err := r.createProxy(ctx, dbcr)
if err != nil {
return r.manageError(ctx, dbcr, err, true)
}
dbcr.Status.Phase = dbPhaseSecretsTemplating
case dbPhaseSecretsTemplating:
err := r.createTemplatedSecrets(ctx, dbcr)
if err != nil {
return r.manageError(ctx, dbcr, err, true)
}
dbcr.Status.Phase = dbPhaseConfigMap
case dbPhaseConfigMap:
err := r.createInfoConfigMap(ctx, dbcr)
if err != nil {
return r.manageError(ctx, dbcr, err, true)
}
dbcr.Status.Phase = dbPhaseBackupJob
case dbPhaseBackupJob:
err := r.createBackupJob(ctx, dbcr)
if err != nil {
return r.manageError(ctx, dbcr, err, true)
}
dbcr.Status.Phase = dbPhaseFinish
case dbPhaseFinish:
dbcr.Status.Status = true
dbcr.Status.Phase = dbPhaseReady
case dbPhaseReady:
return reconcileResult, nil // do nothing and don't requeue
default:
logrus.Errorf("DB: namespace=%s, name=%s unknown phase %s", dbcr.Namespace, dbcr.Name, phase)
err := r.initialize(ctx, dbcr)
if err != nil {
return r.manageError(ctx, dbcr, err, true)
} // set phase to initial state
return r.manageError(ctx, dbcr, errors.New("unknown phase"), false)
err := r.createDatabase(ctx, dbcr)
if err != nil {
// when database creation failed, don't requeue request. to prevent exceeding api limit (ex: against google api)
return r.manageError(ctx, dbcr, err, false)
}
dbcr.Status.Phase = dbPhaseInstanceAccessSecret
err = r.createInstanceAccessSecret(ctx, dbcr)
if err != nil {
return r.manageError(ctx, dbcr, err, true)
}
dbcr.Status.Phase = dbPhaseProxy
err = r.createProxy(ctx, dbcr)
if err != nil {
return r.manageError(ctx, dbcr, err, true)
}
dbcr.Status.Phase = dbPhaseSecretsTemplating
err = r.createTemplatedSecrets(ctx, dbcr)
if err != nil {
return r.manageError(ctx, dbcr, err, true)
}
dbcr.Status.Phase = dbPhaseConfigMap
err = r.createInfoConfigMap(ctx, dbcr)
if err != nil {
return r.manageError(ctx, dbcr, err, true)
}
dbcr.Status.Phase = dbPhaseBackupJob
err = r.createBackupJob(ctx, dbcr)
if err != nil {
return r.manageError(ctx, dbcr, err, true)
}
dbcr.Status.Phase = dbPhaseFinish
dbcr.Status.Status = true
dbcr.Status.Phase = dbPhaseReady

err = r.Status().Update(ctx, dbcr)
if err != nil {
logrus.Errorf("error status subresource updating - %s", err)
return r.manageError(ctx, dbcr, err, true)
}

logrus.Infof("DB: namespace=%s, name=%s finish %s", dbcr.Namespace, dbcr.Name, phase)
return reconcile.Result{Requeue: true}, nil // success phase, but not done ... requeue for next step
}

// status true do nothing and don't requeue
Expand Down
26 changes: 8 additions & 18 deletions controllers/dbinstance_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,7 @@ func (r *DbInstanceReconciler) Reconcile(ctx context.Context, req ctrl.Request)
logrus.Infof("Instance: name=%s %s", dbin.Name, phase)
defer promDBInstancesPhaseTime.WithLabelValues(phase).Observe(time.Since(time.Now()).Seconds())
promDBInstancesPhase.WithLabelValues(dbin.Name).Set(dbInstancePhaseToFloat64(phase))

switch phase {
case dbInstancePhaseValidate:
dbin.Status.Status = false
if !dbin.Status.Status {
if err := dbin.ValidateBackend(); err != nil {
return reconcileResult, err
}
Expand All @@ -119,37 +116,30 @@ func (r *DbInstanceReconciler) Reconcile(ctx context.Context, req ctrl.Request)
addDBInstanceChecksumStatus(ctx, dbin)
dbin.Status.Phase = dbInstancePhaseCreate
dbin.Status.Info = map[string]string{}
case dbInstancePhaseCreate:
err := r.create(ctx, dbin)

err = r.create(ctx, dbin)
if err != nil {
logrus.Errorf("Instance: name=%s instance creation failed - %s", dbin.Name, err)
return reconcileResult, nil // failed but don't requeue the request. retry by changing spec or config
}
dbin.Status.Status = true
dbin.Status.Phase = dbInstancePhaseBroadcast
case dbInstancePhaseBroadcast:
err := r.broadcast(ctx, dbin)

err = r.broadcast(ctx, dbin)
if err != nil {
logrus.Errorf("Instance: name=%s broadcasting failed - %s", dbin.Name, err)
return reconcileResult, err
}
dbin.Status.Phase = dbInstancePhaseProxyCreate
case dbInstancePhaseProxyCreate:
err := r.createProxy(ctx, dbin)

err = r.createProxy(ctx, dbin)
if err != nil {
logrus.Errorf("Instance: name=%s proxy creation failed - %s", dbin.Name, err)
return reconcileResult, err
}
dbin.Status.Phase = dbInstancePhaseRunning
case dbInstancePhaseRunning:
return reconcileResult, nil // do nothing and don't requeue
default:
logrus.Errorf("Instance: name=%s unknown phase %s", dbin.Name, phase)
dbin.Status.Phase = dbInstancePhaseValidate // set phase to initial state
return reconcileResult, errors.New("unknown phase")
}

// dbinstance created successfully - don't requeue
}
return reconcileResult, nil
}

Expand Down

0 comments on commit db5fdce

Please sign in to comment.