From ee8abef411f02da7770d7d5b33ba9979864f83cc Mon Sep 17 00:00:00 2001 From: Terry Yanko Date: Wed, 2 Apr 2025 15:36:25 -0400 Subject: [PATCH 1/4] bypass --- .../crd/bases/psmdb.percona.com_perconaservermongodbs.yaml | 2 ++ pkg/apis/psmdb/v1/psmdb_types.go | 1 + pkg/controller/perconaservermongodb/volumes.go | 7 +++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/config/crd/bases/psmdb.percona.com_perconaservermongodbs.yaml b/config/crd/bases/psmdb.percona.com_perconaservermongodbs.yaml index cc45c8d1b5..f8fb401770 100644 --- a/config/crd/bases/psmdb.percona.com_perconaservermongodbs.yaml +++ b/config/crd/bases/psmdb.percona.com_perconaservermongodbs.yaml @@ -439,6 +439,8 @@ spec: type: string enableVolumeExpansion: type: boolean + externalVolumeAutoscaling: + type: boolean ignoreAnnotations: items: type: string diff --git a/pkg/apis/psmdb/v1/psmdb_types.go b/pkg/apis/psmdb/v1/psmdb_types.go index 4770a410b7..e2dbe133f2 100644 --- a/pkg/apis/psmdb/v1/psmdb_types.go +++ b/pkg/apis/psmdb/v1/psmdb_types.go @@ -97,6 +97,7 @@ type PerconaServerMongoDBSpec struct { Users []User `json:"users,omitempty"` Roles []Role `json:"roles,omitempty"` VolumeExpansionEnabled bool `json:"enableVolumeExpansion,omitempty"` + ExternalVolumeAutoscaling bool `json:"externalVolumeAutoscaling,omitempty"` } type UserRole struct { diff --git a/pkg/controller/perconaservermongodb/volumes.go b/pkg/controller/perconaservermongodb/volumes.go index c2e41fbb75..eb7b98fe5a 100644 --- a/pkg/controller/perconaservermongodb/volumes.go +++ b/pkg/controller/perconaservermongodb/volumes.go @@ -36,8 +36,11 @@ func (r *ReconcilePerconaServerMongoDB) reconcilePVCs(ctx context.Context, cr *a return errors.Wrap(err, "fix volume labels") } - if err := r.resizeVolumesIfNeeded(ctx, cr, sts, ls, volumeSpec); err != nil { - return errors.Wrap(err, "resize volumes if needed") + // Skip volume resizing if external volume autoscaler is enabled + if !cr.Spec.ExternalVolumeAutoscaling { + if err := r.resizeVolumesIfNeeded(ctx, cr, sts, ls, volumeSpec); err != nil { + return errors.Wrap(err, "resize volumes if needed") + } } return nil From 32ec3b400df3ab03530183ca5537bd7e612bdeff Mon Sep 17 00:00:00 2001 From: Terry Yanko Date: Fri, 25 Apr 2025 14:09:19 -0400 Subject: [PATCH 2/4] wip --- pkg/controller/perconaservermongodb/volumes.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/pkg/controller/perconaservermongodb/volumes.go b/pkg/controller/perconaservermongodb/volumes.go index eb7b98fe5a..f50400df24 100644 --- a/pkg/controller/perconaservermongodb/volumes.go +++ b/pkg/controller/perconaservermongodb/volumes.go @@ -36,11 +36,8 @@ func (r *ReconcilePerconaServerMongoDB) reconcilePVCs(ctx context.Context, cr *a return errors.Wrap(err, "fix volume labels") } - // Skip volume resizing if external volume autoscaler is enabled - if !cr.Spec.ExternalVolumeAutoscaling { - if err := r.resizeVolumesIfNeeded(ctx, cr, sts, ls, volumeSpec); err != nil { - return errors.Wrap(err, "resize volumes if needed") - } + if err := r.resizeVolumesIfNeeded(ctx, cr, sts, ls, volumeSpec); err != nil { + return errors.Wrap(err, "resize volumes if needed") } return nil @@ -218,7 +215,7 @@ func (r *ReconcilePerconaServerMongoDB) resizeVolumesIfNeeded(ctx context.Contex } } - if requested.Cmp(actual) < 0 { + if requested.Cmp(actual) < 0 && !cr.Spec.ExternalVolumeAutoscaling { return errors.Errorf("requested storage (%s) is less than actual storage (%s)", requested.String(), actual.String()) } From 108804ae562fa881dce09532fd63e44ce1cd4377 Mon Sep 17 00:00:00 2001 From: Terry Yanko Date: Fri, 25 Apr 2025 15:02:02 -0400 Subject: [PATCH 3/4] return if true --- pkg/controller/perconaservermongodb/volumes.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/controller/perconaservermongodb/volumes.go b/pkg/controller/perconaservermongodb/volumes.go index f50400df24..a130ed6d1a 100644 --- a/pkg/controller/perconaservermongodb/volumes.go +++ b/pkg/controller/perconaservermongodb/volumes.go @@ -215,8 +215,12 @@ func (r *ReconcilePerconaServerMongoDB) resizeVolumesIfNeeded(ctx context.Contex } } - if requested.Cmp(actual) < 0 && !cr.Spec.ExternalVolumeAutoscaling { - return errors.Errorf("requested storage (%s) is less than actual storage (%s)", requested.String(), actual.String()) + if requested.Cmp(actual) < 0 { + if !cr.Spec.ExternalVolumeAutoscaling { + return errors.Errorf("requested storage (%s) is less than actual storage (%s)", requested.String(), actual.String()) + } else { + return nil + } } if requested.Cmp(actual) == 0 { From 4c34e718bf8769e6cc8d0a83f3a5a28b4dbc299c Mon Sep 17 00:00:00 2001 From: Terry Yanko Date: Thu, 1 May 2025 16:54:52 -0400 Subject: [PATCH 4/4] ignore pvcs reconciliation altogether --- pkg/controller/perconaservermongodb/volumes.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/controller/perconaservermongodb/volumes.go b/pkg/controller/perconaservermongodb/volumes.go index a130ed6d1a..1da25ccda9 100644 --- a/pkg/controller/perconaservermongodb/volumes.go +++ b/pkg/controller/perconaservermongodb/volumes.go @@ -48,6 +48,10 @@ func validatePVCName(pvc corev1.PersistentVolumeClaim, sts *appsv1.StatefulSet) } func (r *ReconcilePerconaServerMongoDB) resizeVolumesIfNeeded(ctx context.Context, cr *psmdbv1.PerconaServerMongoDB, sts *appsv1.StatefulSet, ls map[string]string, volumeSpec *api.VolumeSpec) error { + if cr.Spec.ExternalVolumeAutoscaling { + return nil + } + log := logf.FromContext(ctx).WithName("PVCResize").WithValues("sts", sts.Name) pvcSpec := volumeSpec.PersistentVolumeClaim @@ -216,11 +220,7 @@ func (r *ReconcilePerconaServerMongoDB) resizeVolumesIfNeeded(ctx context.Contex } if requested.Cmp(actual) < 0 { - if !cr.Spec.ExternalVolumeAutoscaling { - return errors.Errorf("requested storage (%s) is less than actual storage (%s)", requested.String(), actual.String()) - } else { - return nil - } + return errors.Errorf("requested storage (%s) is less than actual storage (%s)", requested.String(), actual.String()) } if requested.Cmp(actual) == 0 {