From a8bfeb78741473709280ac12d9799f3c48171217 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Thu, 14 Apr 2022 11:06:21 +0200 Subject: [PATCH 1/2] do not call EBS api when there are no pvs --- pkg/cluster/cluster.go | 1 - pkg/cluster/volumes.go | 16 +++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index 4d0fcb1c0..388cb4da0 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -149,7 +149,6 @@ func New(cfg Config, kubeClient k8sutil.KubernetesClient, pgSpec acidv1.Postgres cluster.EBSVolumes = make(map[string]volumes.VolumeProperties) if cfg.OpConfig.StorageResizeMode != "pvc" || cfg.OpConfig.EnableEBSGp3Migration { cluster.VolumeResizer = &volumes.EBSVolumeResizer{AWSRegion: cfg.OpConfig.AWSRegion} - } return cluster diff --git a/pkg/cluster/volumes.go b/pkg/cluster/volumes.go index 78533ef54..a5be969ef 100644 --- a/pkg/cluster/volumes.go +++ b/pkg/cluster/volumes.go @@ -137,7 +137,6 @@ func (c *Cluster) syncUnderlyingEBSVolume() error { for _, s := range errors { c.logger.Warningf(s) } - // c.logger.Errorf("failed to modify %d of %d volumes", len(c.EBSVolumes), len(errors)) } return nil } @@ -149,7 +148,11 @@ func (c *Cluster) populateVolumeMetaData() error { if err != nil { return fmt.Errorf("could not list persistent volumes: %v", err) } - c.logger.Debugf("found %d volumes, size of known volumes %d", len(pvs), len(c.EBSVolumes)) + if len(pvs) == 0 { + c.EBSVolumes = make(map[string]volumes.VolumeProperties) + return fmt.Errorf("no persistent volumes found") + } + c.logger.Debugf("found %d persistent volumes, size of known volumes %d", len(pvs), len(c.EBSVolumes)) volumeIds := []string{} var volumeID string @@ -167,7 +170,7 @@ func (c *Cluster) populateVolumeMetaData() error { return err } - if len(currentVolumes) != len(c.EBSVolumes) { + if len(currentVolumes) != len(c.EBSVolumes) && len(c.EBSVolumes) > 0 { c.logger.Debugf("number of ebs volumes (%d) discovered differs from already known volumes (%d)", len(currentVolumes), len(c.EBSVolumes)) } @@ -205,7 +208,7 @@ func (c *Cluster) syncVolumeClaims() error { // syncVolumes reads all persistent volumes and checks that their size matches the one declared in the statefulset. func (c *Cluster) syncEbsVolumes() error { - c.setProcessName("syncing EBS and Claims volumes") + c.setProcessName("syncing EBS volumes") act, err := c.volumesNeedResizing() if err != nil { @@ -451,11 +454,6 @@ func quantityToGigabyte(q resource.Quantity) int64 { } func (c *Cluster) executeEBSMigration() error { - if !c.OpConfig.EnableEBSGp3Migration { - return nil - } - c.logger.Infof("starting EBS gp2 to gp3 migration") - pvs, err := c.listPersistentVolumes() if err != nil { return fmt.Errorf("could not list persistent volumes: %v", err) From de1ce17b36402e74e5224e44eb1dd0ca032e7f75 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Tue, 19 Apr 2022 17:32:06 +0200 Subject: [PATCH 2/2] let executeEBSMigration operator on cluster.EBSVolumes --- pkg/cluster/sync.go | 2 +- pkg/cluster/volumes.go | 24 ++++++------------------ pkg/cluster/volumes_test.go | 5 ++++- 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/pkg/cluster/sync.go b/pkg/cluster/sync.go index 7ff021ceb..a34279533 100644 --- a/pkg/cluster/sync.go +++ b/pkg/cluster/sync.go @@ -69,7 +69,7 @@ func (c *Cluster) Sync(newSpec *acidv1.Postgresql) error { return err } - if c.OpConfig.EnableEBSGp3Migration { + if c.OpConfig.EnableEBSGp3Migration && len(c.EBSVolumes) > 0 { err = c.executeEBSMigration() if nil != err { return err diff --git a/pkg/cluster/volumes.go b/pkg/cluster/volumes.go index a5be969ef..6b22ed54c 100644 --- a/pkg/cluster/volumes.go +++ b/pkg/cluster/volumes.go @@ -458,20 +458,13 @@ func (c *Cluster) executeEBSMigration() error { if err != nil { return fmt.Errorf("could not list persistent volumes: %v", err) } - c.logger.Debugf("found %d volumes, size of known volumes %d", len(pvs), len(c.EBSVolumes)) - - volumeIds := []string{} - var volumeID string - for _, pv := range pvs { - volumeID, err = c.VolumeResizer.ExtractVolumeID(pv.Spec.AWSElasticBlockStore.VolumeID) - if err != nil { - continue - } - - volumeIds = append(volumeIds, volumeID) + if len(pvs) == 0 { + c.logger.Warningf("no persistent volumes found - skipping EBS migration") + return nil } + c.logger.Debugf("found %d volumes, size of known volumes %d", len(pvs), len(c.EBSVolumes)) - if len(volumeIds) == len(c.EBSVolumes) { + if len(pvs) == len(c.EBSVolumes) { hasGp2 := false for _, v := range c.EBSVolumes { if v.VolumeType == "gp2" { @@ -485,15 +478,10 @@ func (c *Cluster) executeEBSMigration() error { } } - awsVolumes, err := c.VolumeResizer.DescribeVolumes(volumeIds) - if nil != err { - return err - } - var i3000 int64 = 3000 var i125 int64 = 125 - for _, volume := range awsVolumes { + for _, volume := range c.EBSVolumes { if volume.VolumeType == "gp2" && volume.Size < c.OpConfig.EnableEBSGp3MigrationMaxSize { c.logger.Infof("modifying EBS volume %s to type gp3 migration (%d)", volume.VolumeID, volume.Size) err = c.VolumeResizer.ModifyVolume(volume.VolumeID, aws.String("gp3"), &volume.Size, &i3000, &i125) diff --git a/pkg/cluster/volumes_test.go b/pkg/cluster/volumes_test.go index 204ea8aab..4ef94fcfb 100644 --- a/pkg/cluster/volumes_test.go +++ b/pkg/cluster/volumes_test.go @@ -224,7 +224,10 @@ func TestMigrateEBS(t *testing.T) { resizer.EXPECT().ModifyVolume(gomock.Eq("ebs-volume-1"), gomock.Eq(aws.String("gp3")), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) cluster.VolumeResizer = resizer - cluster.executeEBSMigration() + err := cluster.populateVolumeMetaData() + assert.NoError(t, err) + err = cluster.executeEBSMigration() + assert.NoError(t, err) } func initTestVolumesAndPods(client k8sutil.KubernetesClient, namespace, clustername string, labels labels.Set, volumes []testVolume) {