Skip to content

Commit ba4cd81

Browse files
pooknullhors
andauthored
K8SPG-713: handle errors on pgcluster deletion (#1025)
https://perconadev.atlassian.net/browse/K8SPG-713 Co-authored-by: Viacheslav Sarzhan <[email protected]>
1 parent 04948b2 commit ba4cd81

File tree

4 files changed

+36
-9
lines changed

4 files changed

+36
-9
lines changed

internal/controller/postgrescluster/delete.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -100,5 +100,10 @@ func (r *Reconciler) handleDelete(
100100
client.MergeFromWithOptions(before, client.MergeFromWithOptimisticLock{})))
101101

102102
// The caller should wait for further events or requeue upon error.
103-
return &reconcile.Result{}, err
103+
104+
// K8SPG-713: For some reason we get a "not found" error when we try to remove finalizer.
105+
// This is unexpected because finalizers are designed to prevent objects from being deleted
106+
// until all finalizers have been deleted.
107+
108+
return &reconcile.Result{}, client.IgnoreNotFound(err)
104109
}

percona/controller/pgbackup/controller.go

+21-6
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,14 @@ func (r *PGBackupReconciler) Reconcile(ctx context.Context, request reconcile.Re
8989
return reconcile.Result{}, errors.Wrap(err, "ensure finalizers")
9090
}
9191

92-
pgCluster := &v2.PerconaPGCluster{}
93-
err := r.Client.Get(ctx, types.NamespacedName{Name: pgBackup.Spec.PGCluster, Namespace: request.Namespace}, pgCluster)
94-
if err != nil {
95-
return reconcile.Result{}, errors.Wrap(err, "get PostgresCluster")
96-
}
97-
9892
switch pgBackup.Status.State {
9993
case v2.BackupNew:
94+
pgCluster := &v2.PerconaPGCluster{}
95+
err := r.Client.Get(ctx, types.NamespacedName{Name: pgBackup.Spec.PGCluster, Namespace: request.Namespace}, pgCluster)
96+
if err != nil {
97+
return reconcile.Result{}, errors.Wrap(err, "get PostgresCluster")
98+
}
99+
100100
if pgCluster.Spec.Pause != nil && *pgCluster.Spec.Pause {
101101
log.Info("Can't start backup. PostgresCluster is paused", "pg-backup", pgBackup.Name, "cluster", pgCluster.Name)
102102
return reconcile.Result{RequeueAfter: time.Second * 5}, nil
@@ -159,6 +159,12 @@ func (r *PGBackupReconciler) Reconcile(ctx context.Context, request reconcile.Re
159159
log.Info("Backup is starting", "backup", pgBackup.Name, "cluster", pgCluster.Name)
160160
return reconcile.Result{}, nil
161161
case v2.BackupStarting:
162+
pgCluster := &v2.PerconaPGCluster{}
163+
err := r.Client.Get(ctx, types.NamespacedName{Name: pgBackup.Spec.PGCluster, Namespace: request.Namespace}, pgCluster)
164+
if err != nil {
165+
return reconcile.Result{}, errors.Wrap(err, "get PostgresCluster")
166+
}
167+
162168
job, err := findBackupJob(ctx, r.Client, pgCluster, pgBackup)
163169
if err != nil {
164170
if errors.Is(err, ErrBackupJobNotFound) {
@@ -247,6 +253,15 @@ func (r *PGBackupReconciler) Reconcile(ctx context.Context, request reconcile.Re
247253

248254
return reconcile.Result{}, nil
249255
case v2.BackupSucceeded:
256+
pgCluster := &v2.PerconaPGCluster{}
257+
err := r.Client.Get(ctx, types.NamespacedName{Name: pgBackup.Spec.PGCluster, Namespace: request.Namespace}, pgCluster)
258+
if err != nil {
259+
if k8serrors.IsNotFound(err) {
260+
return reconcile.Result{}, nil
261+
}
262+
return reconcile.Result{}, errors.Wrap(err, "get PostgresCluster")
263+
}
264+
250265
execCli, err := clientcmd.NewClient()
251266
if err != nil {
252267
return reconcile.Result{}, errors.Wrap(err, "failed to create exec client")

percona/controller/pgcluster/controller.go

+6
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,9 @@ func (r *PGClusterReconciler) Reconcile(ctx context.Context, request reconcile.R
312312
}
313313

314314
if err := r.Client.Get(ctx, client.ObjectKeyFromObject(postgresCluster), postgresCluster); err != nil {
315+
if k8serrors.IsNotFound(err) {
316+
return ctrl.Result{RequeueAfter: 1 * time.Second}, nil
317+
}
315318
return ctrl.Result{}, errors.Wrap(err, "get PostgresCluster")
316319
}
317320

@@ -371,6 +374,9 @@ func (r *PGClusterReconciler) reconcilePatroniVersionCheck(ctx context.Context,
371374
},
372375
}
373376

377+
if err := controllerutil.SetControllerReference(cr, p, r.Client.Scheme()); err != nil {
378+
return errors.Wrap(err, "set controller reference")
379+
}
374380
if err := r.Client.Create(ctx, p); err != nil {
375381
return errors.Wrap(err, "failed to create pod to check patroni version")
376382
}

pkg/apis/pgv2.percona.com/v2/perconapgcluster_types.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,9 @@ func (cr *PerconaPGCluster) ToCrunchy(ctx context.Context, postgresCluster *crun
246246
if postgresCluster == nil {
247247
postgresCluster = &crunchyv1beta1.PostgresCluster{
248248
ObjectMeta: metav1.ObjectMeta{
249-
Name: cr.Name,
250-
Namespace: cr.Namespace,
249+
Name: cr.Name,
250+
Namespace: cr.Namespace,
251+
Finalizers: []string{naming.Finalizer},
251252
},
252253
}
253254
}

0 commit comments

Comments
 (0)