Skip to content

Commit

Permalink
EVEREST-1689 | Use new PSMDB finalizers (#603)
Browse files Browse the repository at this point in the history
Signed-off-by: Mayank Shah <[email protected]>
  • Loading branch information
mayankshah1607 authored Jan 27, 2025
1 parent cc7a946 commit aeee65c
Show file tree
Hide file tree
Showing 38 changed files with 125 additions and 71 deletions.
1 change: 1 addition & 0 deletions api/v1alpha1/databasecluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ type Applier interface {
DataSource() error
Monitoring() error
Backup() error
Metadata() error
}

// Storage is the storage configuration.
Expand Down
3 changes: 3 additions & 0 deletions internal/controller/databasecluster_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,9 @@ func (r *DatabaseClusterReconciler) reconcileDB(
applier := p.Apply(ctx)
applier.Paused(db.Spec.Paused)
applier.AllowUnsafeConfig(db.Spec.AllowUnsafeConfiguration)
if err := applier.Metadata(); err != nil {
return err
}
if err := applier.Engine(); err != nil {
return err
}
Expand Down
11 changes: 10 additions & 1 deletion internal/controller/databaseclusterbackup_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ const (
pxcGapsReasonString = "BinlogGapDetected"

deletePXCBackupFinalizer = "delete-s3-backup"
deletePSMDBBackupFinalizer = "delete-backup"
deletePSMDBBackupFinalizer = "percona.com/delete-backup"
)

// ErrBackupStorageUndefined is returned when a backup storage is not defined
Expand Down Expand Up @@ -664,6 +664,15 @@ func (r *DatabaseClusterBackupReconciler) reconcilePSMDB(
return false, err
}
}
// replace legacy finalizer.
if controllerutil.RemoveFinalizer(psmdbCR, "delete-backup") &&
psmdbCR.GetDeletionTimestamp().IsZero() {
controllerutil.AddFinalizer(psmdbCR, deletePSMDBBackupFinalizer)
if err := r.Update(ctx, psmdbCR); err != nil {
return false, err
}
}

backup.Status.State = everestv1alpha1.GetDBBackupState(psmdbCR)
backup.Status.CompletedAt = psmdbCR.Status.CompletedAt
backup.Status.CreatedAt = &psmdbCR.CreationTimestamp
Expand Down
12 changes: 12 additions & 0 deletions internal/controller/providers/pg/applier.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,18 @@ func (p *applier) Paused(paused bool) {
func (p *applier) AllowUnsafeConfig(_ bool) {
}

func (p *applier) Metadata() error {
if p.PerconaPGCluster.GetDeletionTimestamp().IsZero() {
for _, f := range []string{
finalizerDeletePGPVC,
finalizerDeletePGSSL,
} {
controllerutil.AddFinalizer(p.PerconaPGCluster, f)
}
}
return nil
}

func (p *applier) Engine() error {
pg := p.PerconaPGCluster
database := p.DB
Expand Down
9 changes: 0 additions & 9 deletions internal/controller/providers/pg/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

everestv1alpha1 "github.com/percona/everest-operator/api/v1alpha1"
"github.com/percona/everest-operator/internal/controller/common"
Expand Down Expand Up @@ -66,14 +65,6 @@ func New(
currentPGSpec := pg.Spec
pg.Spec = defaultSpec()

finalizers := []string{
finalizerDeletePGPVC,
finalizerDeletePGSSL,
}
for _, f := range finalizers {
controllerutil.AddFinalizer(pg, f)
}

p := &Provider{
PerconaPGCluster: pg,
ProviderOptions: opts,
Expand Down
21 changes: 21 additions & 0 deletions internal/controller/providers/psmdb/applier.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

everestv1alpha1 "github.com/percona/everest-operator/api/v1alpha1"
"github.com/percona/everest-operator/internal/controller/common"
Expand All @@ -48,6 +49,26 @@ type applier struct {
ctx context.Context //nolint:containedctx
}

func (p *applier) Metadata() error {
if p.PerconaServerMongoDB.GetDeletionTimestamp().IsZero() {
for _, f := range []string{
finalizerDeletePSMDBPodsInOrder,
finalizerDeletePSMDBPVC,
} {
controllerutil.AddFinalizer(p.PerconaServerMongoDB, f)
}

// remove legacy finalizers.
for _, f := range []string{
"delete-psmdb-pods-in-order",
"delete-psmdb-pvc",
} {
controllerutil.RemoveFinalizer(p.PerconaServerMongoDB, f)
}
}
return nil
}

func (p *applier) Paused(paused bool) {
p.PerconaServerMongoDB.Spec.Pause = paused
}
Expand Down
14 changes: 2 additions & 12 deletions internal/controller/providers/psmdb/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/intstr"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

everestv1alpha1 "github.com/percona/everest-operator/api/v1alpha1"
"github.com/percona/everest-operator/internal/controller/common"
Expand All @@ -37,8 +36,8 @@ import (
)

const (
finalizerDeletePSMDBPodsInOrder = "delete-psmdb-pods-in-order"
finalizerDeletePSMDBPVC = "delete-psmdb-pvc"
finalizerDeletePSMDBPodsInOrder = "percona.com/delete-psmdb-pods-in-order"
finalizerDeletePSMDBPVC = "percona.com/delete-psmdb-pvc"
)

// Provider is a provider for Percona Server for MongoDB.
Expand Down Expand Up @@ -71,15 +70,6 @@ func New(
return nil, err
}

// Add necessary finalizers.
finalizers := []string{
finalizerDeletePSMDBPodsInOrder,
finalizerDeletePSMDBPVC,
}
for _, f := range finalizers {
controllerutil.AddFinalizer(psmdb, f)
}

dbEngine, err := common.GetDatabaseEngine(ctx, client, common.PSMDBDeploymentName, opts.DB.GetNamespace())
if err != nil {
return nil, err
Expand Down
13 changes: 13 additions & 0 deletions internal/controller/providers/pxc/applier.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,19 @@ type applier struct {
ctx context.Context //nolint:containedctx
}

func (p *applier) Metadata() error {
if p.PerconaXtraDBCluster.GetDeletionTimestamp().IsZero() {
for _, f := range []string{
finalizerDeletePXCPodsInOrder,
finalizerDeletePXCPVC,
finalizerDeletePXCSSL,
} {
controllerutil.AddFinalizer(p.PerconaXtraDBCluster, f)
}
}
return nil
}

func (p *applier) Paused(paused bool) {
p.Provider.PerconaXtraDBCluster.Spec.Pause = paused
}
Expand Down
11 changes: 0 additions & 11 deletions internal/controller/providers/pxc/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

everestv1alpha1 "github.com/percona/everest-operator/api/v1alpha1"
"github.com/percona/everest-operator/internal/controller/common"
Expand Down Expand Up @@ -71,16 +70,6 @@ func New(
return nil, err
}

// Add necessary finalizers.
finalizers := []string{
finalizerDeletePXCPodsInOrder,
finalizerDeletePXCPVC,
finalizerDeletePXCSSL,
}
for _, f := range finalizers {
controllerutil.AddFinalizer(pxc, f)
}

dbEngine, err := common.GetDatabaseEngine(ctx, client, common.PXCDeploymentName, opts.DB.GetNamespace())
if err != nil {
return nil, err
Expand Down
3 changes: 2 additions & 1 deletion tests/e2e/core/pg/40-delete-cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ apiVersion: kuttl.dev/v1
kind: TestStep
timeout: 10
commands:
- command: kubectl -n $NAMESPACE delete db test-pg-cluster
- script: kubectl -n $NAMESPACE delete db test-pg-cluster --wait=false && sleep 5
- command: kubectl patch postgresclusters test-pg-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
ignoreFailure: true
- command: kubectl patch pg test-pg-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
ignoreFailure: true
- command: kubectl wait --for=delete db test-pg-cluster --timeout=60s -n $NAMESPACE
6 changes: 4 additions & 2 deletions tests/e2e/core/pg/90-delete-clusters.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- command: kubectl -n $NAMESPACE delete db test-single-node
- script: kubectl -n $NAMESPACE delete db test-single-node --wait=false && sleep 5
- command: kubectl patch postgresclusters test-single-node -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
ignoreFailure: true
- command: kubectl -n $NAMESPACE delete db test-pg-cluster
- script: kubectl -n $NAMESPACE delete db test-pg-cluster --wait=false && sleep 5
- command: kubectl patch postgresclusters test-pg-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
ignoreFailure: true
- command: kubectl wait --for=delete db test-single-node --timeout=60s -n $NAMESPACE
- command: kubectl wait --for=delete db test-pg-cluster --timeout=60s -n $NAMESPACE
4 changes: 2 additions & 2 deletions tests/e2e/core/psmdb/10-assert.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ kind: PerconaServerMongoDB
metadata:
name: test-psmdb-cluster
finalizers:
- delete-psmdb-pods-in-order
- delete-psmdb-pvc
- percona.com/delete-psmdb-pods-in-order
- percona.com/delete-psmdb-pvc
spec:
image: percona/percona-server-mongodb:7.0.12-7
multiCluster:
Expand Down
3 changes: 2 additions & 1 deletion tests/e2e/core/psmdb/40-delete-clusters.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- command: kubectl -n $NAMESPACE delete db test-psmdb-cluster
- script: kubectl -n $NAMESPACE delete db test-psmdb-cluster --wait=false && sleep 5
- command: kubectl -n $NAMESPACE delete secret everest-secrets-test-psmdb-cluster
ignoreFailure: true
- command: kubectl patch psmdb test-psmdb-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
ignoreFailure: true
- command: kubectl wait --for=delete db test-psmdb-cluster --timeout=60s -n $NAMESPACE
3 changes: 2 additions & 1 deletion tests/e2e/core/psmdb/97-delete-clusters.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ apiVersion: kuttl.dev/v1
kind: TestStep
timeout: 10
commands:
- command: kubectl -n $NAMESPACE delete db single-node
- script: kubectl -n $NAMESPACE delete db single-node --wait=false && sleep 5
- command: kubectl patch psmdb single-node -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
ignoreFailure: true
- command: kubectl wait --for=delete db single-node --timeout=60s -n $NAMESPACE
3 changes: 2 additions & 1 deletion tests/e2e/core/pxc/40-delete-cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ apiVersion: kuttl.dev/v1
kind: TestStep
timeout: 10
commands:
- command: kubectl -n $NAMESPACE delete db test-pxc-cluster
- script: kubectl -n $NAMESPACE delete db test-pxc-cluster --wait=false && sleep 5
- command: kubectl patch pxc test-pxc-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
ignoreFailure: true
- command: kubectl wait --for=delete db test-pxc-cluster --timeout=60s -n $NAMESPACE
3 changes: 2 additions & 1 deletion tests/e2e/core/pxc/97-delete-cluster.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- command: kubectl -n $NAMESPACE delete db test-pxc-cluster
- script: kubectl -n $NAMESPACE delete db test-pxc-cluster --wait=false && sleep 5
- command: kubectl patch pxc test-pxc-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
ignoreFailure: true
- command: kubectl wait --for=delete db test-pxc-cluster --timeout=60s -n $NAMESPACE
6 changes: 4 additions & 2 deletions tests/e2e/upgrade/pg/90-delete-clusters.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- command: kubectl patch perconapgclusters test-pg-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
- command: kubectl -n $NAMESPACE delete db test-pg-cluster
- script: kubectl -n $NAMESPACE delete db test-pg-cluster --wait=false && sleep 5
- script: kubectl patch perconapgclusters test-pg-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge || true
- command: kubectl wait --for=delete db test-pg-cluster --timeout=5m -n $NAMESPACE

4 changes: 2 additions & 2 deletions tests/e2e/upgrade/psmdb/90-delete-cluster.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- script: kubectl -n $NAMESPACE delete db test-psmdb-cluster --wait=false && sleep 5
- command: kubectl patch psmdb test-psmdb-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
- command: kubectl -n $NAMESPACE delete db test-psmdb-cluster
ignoreFailure: true
- command: kubectl wait --for=delete db test-psmdb-cluster --timeout=60s -n $NAMESPACE
4 changes: 2 additions & 2 deletions tests/e2e/upgrade/pxc/90-delete-cluster.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- script: kubectl -n $NAMESPACE delete db test-pxc-cluster --wait=false && sleep 5
- command: kubectl patch pxc test-pxc-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
- command: kubectl -n $NAMESPACE delete db test-pxc-cluster
ignoreFailure: true
- command: kubectl wait --for=delete db test-pxc-cluster --timeout=60s -n $NAMESPACE
3 changes: 2 additions & 1 deletion tests/integration/core/pg/19-delete-cluster.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- script: kubectl -n $NAMESPACE delete db test-pg-cluster --wait=false && sleep 5
- command: kubectl patch perconapgclusters test-pg-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
- command: kubectl -n $NAMESPACE delete db test-pg-cluster
- command: kubectl wait --for=delete db/test-pg-cluster -n $NAMESPACE
3 changes: 2 additions & 1 deletion tests/integration/core/pg/29-delete-cluster.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- script: kubectl -n $NAMESPACE delete db test-pg-cluster --wait=false && sleep 5
- command: kubectl patch perconapgclusters test-pg-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
- command: kubectl -n $NAMESPACE delete db test-pg-cluster
- command: kubectl wait --for=delete db/test-pg-cluster -n $NAMESPACE
4 changes: 2 additions & 2 deletions tests/integration/core/psmdb/10-assert.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ kind: PerconaServerMongoDB
metadata:
name: test-psmdb-cluster
finalizers:
- delete-psmdb-pods-in-order
- delete-psmdb-pvc
- percona.com/delete-psmdb-pods-in-order
- percona.com/delete-psmdb-pvc
spec:
backup:
configuration:
Expand Down
3 changes: 2 additions & 1 deletion tests/integration/core/psmdb/19-delete-cluster.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- script: kubectl -n $NAMESPACE delete db test-psmdb-cluster --wait=false && sleep 5
- command: kubectl patch psmdb test-psmdb-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
- command: kubectl -n $NAMESPACE delete db test-psmdb-cluster
- command: kubectl wait --for=delete db/test-psmdb-cluster -n $NAMESPACE
4 changes: 2 additions & 2 deletions tests/integration/core/psmdb/20-assert.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ kind: PerconaServerMongoDB
metadata:
name: test-psmdb-cluster
finalizers:
- delete-psmdb-pods-in-order
- delete-psmdb-pvc
- percona.com/delete-psmdb-pods-in-order
- percona.com/delete-psmdb-pvc
spec:
allowUnsafeConfigurations: true
backup:
Expand Down
3 changes: 2 additions & 1 deletion tests/integration/core/psmdb/29-delete-cluster.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- script: kubectl -n $NAMESPACE delete db test-psmdb-cluster --wait=false && sleep 5
- command: kubectl patch psmdb test-psmdb-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
- command: kubectl -n $NAMESPACE delete db test-psmdb-cluster
- command: kubectl wait --for=delete db/test-psmdb-cluster -n $NAMESPACE
3 changes: 2 additions & 1 deletion tests/integration/core/pxc/19-delete-cluster.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- script: kubectl -n $NAMESPACE delete db test-pxc-cluster --wait=false && sleep 5
- command: kubectl patch pxc test-pxc-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
- command: kubectl -n $NAMESPACE delete db test-pxc-cluster
- command: kubectl wait --for=delete db/test-pxc-cluster -n $NAMESPACE
3 changes: 2 additions & 1 deletion tests/integration/core/pxc/29-delete-cluster.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- script: kubectl -n $NAMESPACE delete db test-pxc-cluster --wait=false && sleep 5
- command: kubectl patch pxc test-pxc-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
- command: kubectl -n $NAMESPACE delete db test-pxc-cluster
- command: kubectl wait --for=delete db/test-pxc-cluster -n $NAMESPACE
6 changes: 4 additions & 2 deletions tests/integration/features/affinity/95-cleanup.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
apiVersion: kuttl.dev/v1
kind: TestStep
commands:
- script: kubectl -n $NAMESPACE delete db test-pxc-cluster --wait=false && sleep 5
- command: kubectl patch pxc test-pxc-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
ignoreFailure: true
- command: kubectl -n $NAMESPACE delete db test-pxc-cluster
- script: kubectl -n $NAMESPACE delete db test-psmdb-cluster --wait=false && sleep 5
- command: kubectl patch psmdb test-psmdb-cluster -n $NAMESPACE -p '{"metadata":{"finalizers":null}}' --type merge
ignoreFailure: true
- command: kubectl -n $NAMESPACE delete db test-psmdb-cluster
- command: kubectl wait --for=delete db/test-psmdb-cluster -n $NAMESPACE
- command: kubectl wait --for=delete db/test-pxc-cluster -n $NAMESPACE
2 changes: 1 addition & 1 deletion tests/integration/features/dbbackup_pg/22-assert.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
apiVersion: kuttl.dev/v1
kind: TestAssert
timeout: 20
timeout: 60
commands:
# check that there is no dbr/pg-restore CRs left
- script: >
Expand Down
Loading

0 comments on commit aeee65c

Please sign in to comment.