refactor: consolidate Instance phase handlers
E2E Tests / Run on Ubuntu (pull_request) Failing after 1m28s
Tests / Run on Ubuntu (pull_request) Successful in 4m35s
Lint / Run on Ubuntu (pull_request) Successful in 4m58s

This commit is contained in:
2026-09-11 15:04:15 +00:00
parent 212ca4be99
commit 89d9e2316b
3 changed files with 164 additions and 103 deletions
@@ -18,7 +18,6 @@ package controller
import (
"context"
"errors"
"reflect"
"time"
@@ -66,17 +65,12 @@ func (r *PostgreSQLInstanceReconciler) Reconcile(ctx context.Context, req ctrl.R
}
before := instance.DeepCopy()
phaseResult := newInstanceStateMachine().reconcile(instance)
instance.Status.Phase = phaseResult.phase
if phaseResult.reconcilingMessage != "" {
setReconcilingCondition(&instance.Status.Conditions, instance.Generation, phaseResult.reconcilingMessage)
}
var reconcileErr error
if r.Initializer != nil && instance.DeletionTimestamp.IsZero() &&
before.Status.Phase != "" && before.Status.Phase != databasev1alpha1.PostgreSQLInstancePhasePending {
reconcileErr = r.reconcileDependencies(ctx, instance)
if r.Timeout > 0 {
var cancel context.CancelFunc
ctx, cancel = context.WithTimeout(ctx, r.Timeout)
defer cancel()
}
result, reconcileErr := newInstanceStateMachine(r.Initializer).reconcile(ctx, instance)
if !reflect.DeepEqual(before.Status, instance.Status) {
if err := r.Status().Patch(ctx, instance, client.MergeFrom(before)); err != nil {
@@ -87,56 +81,7 @@ func (r *PostgreSQLInstanceReconciler) Reconcile(ctx context.Context, req ctrl.R
}
}
return ctrl.Result{}, reconcileErr
}
func (r *PostgreSQLInstanceReconciler) reconcileDependencies(
ctx context.Context,
instance *databasev1alpha1.PostgreSQLInstance,
) error {
if r.Timeout > 0 {
var cancel context.CancelFunc
ctx, cancel = context.WithTimeout(ctx, r.Timeout)
defer cancel()
}
if instance.Status.Phase == databasev1alpha1.PostgreSQLInstancePhaseReady &&
instance.Status.ObservedGeneration != instance.Generation {
instance.Status.Phase = databasev1alpha1.PostgreSQLInstancePhaseValidating
setReconcilingCondition(&instance.Status.Conditions, instance.Generation, "instance dependencies are being validated")
return nil
}
var version string
var err error
switch instance.Status.Phase {
case databasev1alpha1.PostgreSQLInstancePhaseValidating:
version, err = r.Initializer.Validate(ctx, instance)
if err == nil {
instance.Status.PostgreSQLVersion = version
instance.Status.Phase = databasev1alpha1.PostgreSQLInstancePhaseInitializingRegistry
setReconcilingCondition(&instance.Status.Conditions, instance.Generation, "PostgreSQL registry is being initialized")
}
case databasev1alpha1.PostgreSQLInstancePhaseInitializingRegistry:
version, err = r.Initializer.InitializeRegistry(ctx, instance)
if err == nil {
instance.Status.PostgreSQLVersion = version
instance.Status.Phase = databasev1alpha1.PostgreSQLInstancePhaseReady
instance.Status.ObservedGeneration = instance.Generation
setReadyCondition(&instance.Status.Conditions, instance.Generation, "instance dependencies are ready")
}
}
if err != nil {
instance.Status.ObservedGeneration = instance.Generation
reason := databasev1alpha1.ReasonDependencyUnavailable
var categorized interface{ ConditionReason() string }
if errors.As(err, &categorized) {
reason = categorized.ConditionReason()
}
setFailedCondition(&instance.Status.Conditions, instance.Generation, reason,
"instance dependency validation failed")
}
return err
return result, reconcileErr
}
// SetupWithManager sets up the controller with the Manager.