From d67e7937e63e46c440d4ecb36b15213a5f0364cc Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Fri, 27 Jun 2025 15:55:41 -0400 Subject: [PATCH] Remove recovery related featuregates --- test/e2e/feature/feature.go | 3 - test/e2e/storage/csimock/base.go | 62 +++++----- .../storage/csimock/csi_volume_expansion.go | 75 +++++++++++- test/e2e/storage/drivers/csi.go | 109 ++++++++---------- 4 files changed, 151 insertions(+), 98 deletions(-) diff --git a/test/e2e/feature/feature.go b/test/e2e/feature/feature.go index e4109aea17b..af0503d669a 100644 --- a/test/e2e/feature/feature.go +++ b/test/e2e/feature/feature.go @@ -368,9 +368,6 @@ var ( // TODO: document the feature (owning SIG, when to use this feature for a test) ReclaimPolicy = framework.WithFeature(framework.ValidFeatures.Add("ReclaimPolicy")) - // TODO: document the feature (owning SIG, when to use this feature for a test) - RecoverVolumeExpansionFailure = framework.WithFeature(framework.ValidFeatures.Add("RecoverVolumeExpansionFailure")) - // TODO: document the feature (owning SIG, when to use this feature for a test) RegularResourceUsageTracking = framework.WithFeature(framework.ValidFeatures.Add("RegularResourceUsageTracking")) diff --git a/test/e2e/storage/csimock/base.go b/test/e2e/storage/csimock/base.go index a1f318db340..467cfb57baf 100644 --- a/test/e2e/storage/csimock/base.go +++ b/test/e2e/storage/csimock/base.go @@ -95,19 +95,18 @@ type testParameters struct { enableResizing bool // enable resizing for both CSI mock driver and storageClass. enableNodeExpansion bool // enable node expansion for CSI mock driver // just disable resizing on driver it overrides enableResizing flag for CSI mock driver - disableResizingOnDriver bool - disableControllerExpansion bool - enableSnapshot bool - enableVolumeMountGroup bool // enable the VOLUME_MOUNT_GROUP node capability in the CSI mock driver. - enableNodeVolumeCondition bool - hooks *drivers.Hooks - tokenRequests []storagev1.TokenRequest - requiresRepublish *bool - fsGroupPolicy *storagev1.FSGroupPolicy - enableSELinuxMount *bool - enableRecoverExpansionFailure bool - enableCSINodeExpandSecret bool - reclaimPolicy *v1.PersistentVolumeReclaimPolicy + disableResizingOnDriver bool + disableControllerExpansion bool + enableSnapshot bool + enableVolumeMountGroup bool // enable the VOLUME_MOUNT_GROUP node capability in the CSI mock driver. + enableNodeVolumeCondition bool + hooks *drivers.Hooks + tokenRequests []storagev1.TokenRequest + requiresRepublish *bool + fsGroupPolicy *storagev1.FSGroupPolicy + enableSELinuxMount *bool + enableCSINodeExpandSecret bool + reclaimPolicy *v1.PersistentVolumeReclaimPolicy } type mockDriverSetup struct { @@ -164,23 +163,22 @@ func (m *mockDriverSetup) init(ctx context.Context, tp testParameters) { var err error driverOpts := drivers.CSIMockDriverOpts{ - RegisterDriver: tp.registerDriver, - PodInfo: tp.podInfo, - StorageCapacity: tp.storageCapacity, - EnableTopology: tp.enableTopology, - AttachLimit: tp.attachLimit, - DisableAttach: tp.disableAttach, - EnableResizing: tp.enableResizing, - EnableNodeExpansion: tp.enableNodeExpansion, - EnableNodeVolumeCondition: tp.enableNodeVolumeCondition, - DisableControllerExpansion: tp.disableControllerExpansion, - EnableSnapshot: tp.enableSnapshot, - EnableVolumeMountGroup: tp.enableVolumeMountGroup, - TokenRequests: tp.tokenRequests, - RequiresRepublish: tp.requiresRepublish, - FSGroupPolicy: tp.fsGroupPolicy, - EnableSELinuxMount: tp.enableSELinuxMount, - EnableRecoverExpansionFailure: tp.enableRecoverExpansionFailure, + RegisterDriver: tp.registerDriver, + PodInfo: tp.podInfo, + StorageCapacity: tp.storageCapacity, + EnableTopology: tp.enableTopology, + AttachLimit: tp.attachLimit, + DisableAttach: tp.disableAttach, + EnableResizing: tp.enableResizing, + EnableNodeExpansion: tp.enableNodeExpansion, + EnableNodeVolumeCondition: tp.enableNodeVolumeCondition, + DisableControllerExpansion: tp.disableControllerExpansion, + EnableSnapshot: tp.enableSnapshot, + EnableVolumeMountGroup: tp.enableVolumeMountGroup, + TokenRequests: tp.tokenRequests, + RequiresRepublish: tp.requiresRepublish, + FSGroupPolicy: tp.fsGroupPolicy, + EnableSELinuxMount: tp.enableSELinuxMount, } // At the moment, only tests which need hooks are @@ -507,7 +505,7 @@ func (m *mockDriverSetup) createPodWithSELinux(ctx context.Context, accessModes return class, claim, pod } -func (m *mockDriverSetup) createResourceQuota(ctx context.Context, quota *v1.ResourceQuota) (*v1.ResourceQuota, error) { +func (m *mockDriverSetup) createResourceQuota(ctx context.Context, quota *v1.ResourceQuota) *v1.ResourceQuota { ginkgo.By("Creating Resource Quota") f := m.f @@ -520,7 +518,7 @@ func (m *mockDriverSetup) createResourceQuota(ctx context.Context, quota *v1.Res quota, err = f.ClientSet.CoreV1().ResourceQuotas(f.Namespace.Name).Create(ctx, quota, metav1.CreateOptions{}) framework.ExpectNoError(err, "Failed to create resourceQuota") m.quotas = append(m.quotas, quota) - return quota, err + return quota } func waitForCSIDriver(cs clientset.Interface, driverName string) error { diff --git a/test/e2e/storage/csimock/csi_volume_expansion.go b/test/e2e/storage/csimock/csi_volume_expansion.go index 51688d300cc..5ef302d92ac 100644 --- a/test/e2e/storage/csimock/csi_volume_expansion.go +++ b/test/e2e/storage/csimock/csi_volume_expansion.go @@ -432,6 +432,22 @@ var _ = utils.SIGDescribe("CSI Mock volume expansion", func() { simulatedCSIDriverError: expansionFailedOnControllerWithInfeasibleError, expectedResizeStatus: v1.PersistentVolumeClaimControllerResizeInfeasible, recoverySize: resource.MustParse("4Gi"), + fullResourceQuota: &v1.ResourceQuota{ + Spec: v1.ResourceQuotaSpec{ + Hard: v1.ResourceList{ + pvcSizeQuotaKey: resource.MustParse("20Gi"), + pvcCountQuotaKey: resource.MustParse("5"), + }, + }, + }, + expectedQuotaUsage: &v1.ResourceQuota{ + Status: v1.ResourceQuotaStatus{ + Used: v1.ResourceList{ + pvcSizeQuotaKey: resource.MustParse("4Gi"), + pvcCountQuotaKey: resource.MustParse("1"), + }, + }, + }, }, { name: "should allow recovery if controller expansion fails with final error", @@ -441,6 +457,22 @@ var _ = utils.SIGDescribe("CSI Mock volume expansion", func() { simulatedCSIDriverError: expansionFailedOnControllerWithFinalError, expectedResizeStatus: v1.PersistentVolumeClaimControllerResizeInProgress, recoverySize: resource.MustParse("4Gi"), + fullResourceQuota: &v1.ResourceQuota{ + Spec: v1.ResourceQuotaSpec{ + Hard: v1.ResourceList{ + pvcSizeQuotaKey: resource.MustParse("20Gi"), + pvcCountQuotaKey: resource.MustParse("5"), + }, + }, + }, + expectedQuotaUsage: &v1.ResourceQuota{ + Status: v1.ResourceQuotaStatus{ + Used: v1.ResourceList{ + pvcSizeQuotaKey: resource.MustParse("4Gi"), + pvcCountQuotaKey: resource.MustParse("1"), + }, + }, + }, }, { name: "recovery should not be possible in partially expanded volumes", @@ -459,6 +491,22 @@ var _ = utils.SIGDescribe("CSI Mock volume expansion", func() { simulatedCSIDriverError: expansionFailedOnNodeWithInfeasibleError, expectedResizeStatus: v1.PersistentVolumeClaimNodeResizeInfeasible, recoverySize: resource.MustParse("5Gi"), + fullResourceQuota: &v1.ResourceQuota{ + Spec: v1.ResourceQuotaSpec{ + Hard: v1.ResourceList{ + pvcSizeQuotaKey: resource.MustParse("20Gi"), + pvcCountQuotaKey: resource.MustParse("5"), + }, + }, + }, + expectedQuotaUsage: &v1.ResourceQuota{ + Status: v1.ResourceQuotaStatus{ + Used: v1.ResourceList{ + pvcSizeQuotaKey: resource.MustParse("5Gi"), + pvcCountQuotaKey: resource.MustParse("1"), + }, + }, + }, }, { name: "recovery should be possible for node-only expanded volumes with final error", @@ -468,6 +516,22 @@ var _ = utils.SIGDescribe("CSI Mock volume expansion", func() { simulatedCSIDriverError: expansionFailedOnNodeWithFinalError, expectedResizeStatus: v1.PersistentVolumeClaimNodeResizeInProgress, recoverySize: resource.MustParse("5Gi"), + fullResourceQuota: &v1.ResourceQuota{ + Spec: v1.ResourceQuotaSpec{ + Hard: v1.ResourceList{ + pvcSizeQuotaKey: resource.MustParse("20Gi"), + pvcCountQuotaKey: resource.MustParse("5"), + }, + }, + }, + expectedQuotaUsage: &v1.ResourceQuota{ + Status: v1.ResourceQuotaStatus{ + Used: v1.ResourceList{ + pvcSizeQuotaKey: resource.MustParse("5Gi"), + pvcCountQuotaKey: resource.MustParse("1"), + }, + }, + }, }, } @@ -475,7 +539,7 @@ var _ = utils.SIGDescribe("CSI Mock volume expansion", func() { test := t ginkgo.It(test.name, func(ctx context.Context) { var err error - params := testParameters{enableResizing: true, enableNodeExpansion: true, enableRecoverExpansionFailure: true, disableControllerExpansion: test.disableControllerExpansion} + params := testParameters{enableResizing: true, enableNodeExpansion: true, disableControllerExpansion: test.disableControllerExpansion} if test.simulatedCSIDriverError != expansionSuccess { params.hooks = createExpansionHook(test.simulatedCSIDriverError) @@ -483,9 +547,10 @@ var _ = utils.SIGDescribe("CSI Mock volume expansion", func() { m.init(ctx, params) ginkgo.DeferCleanup(m.cleanup) + var currentQuota *v1.ResourceQuota if test.fullResourceQuota != nil { - m.createResourceQuota(ctx, test.fullResourceQuota) + currentQuota = m.createResourceQuota(ctx, test.fullResourceQuota) } sc, pvc, pod := m.createPod(ctx, pvcReference) @@ -517,14 +582,14 @@ var _ = utils.SIGDescribe("CSI Mock volume expansion", func() { } if test.expectedQuotaUsage != nil { - validateQuotaUsage(ctx, m, test.expectedQuotaUsage) + validateQuotaUsage(ctx, m, currentQuota, test.expectedQuotaUsage) } }) } }) }) -func validateQuotaUsage(ctx context.Context, m *mockDriverSetup, expectedQuota *v1.ResourceQuota) { +func validateQuotaUsage(ctx context.Context, m *mockDriverSetup, currentQuota, expectedQuota *v1.ResourceQuota) { ginkgo.By("Waiting for resource quota usage to be updated") var err error var quota *v1.ResourceQuota @@ -535,7 +600,7 @@ func validateQuotaUsage(ctx context.Context, m *mockDriverSetup, expectedQuota * expectedUsedSize := expectedQuota.Status.Used[pvcSizeQuotaKey] waitErr := wait.PollUntilContextTimeout(ctx, resizePollInterval, csiResizeWaitPeriod, true, func(pollContext context.Context) (bool, error) { - quota, err = m.cs.CoreV1().ResourceQuotas(expectedQuota.Namespace).Get(pollContext, expectedQuota.Name, metav1.GetOptions{}) + quota, err = m.cs.CoreV1().ResourceQuotas(currentQuota.Namespace).Get(pollContext, currentQuota.Name, metav1.GetOptions{}) if err != nil { return false, fmt.Errorf("error fetching resource quota %q: %w", expectedQuota.Name, err) } diff --git a/test/e2e/storage/drivers/csi.go b/test/e2e/storage/drivers/csi.go index 710850bc59b..abb2b176b2c 100644 --- a/test/e2e/storage/drivers/csi.go +++ b/test/e2e/storage/drivers/csi.go @@ -338,26 +338,25 @@ func (h *hostpathCSIDriver) PrepareTest(ctx context.Context, f *framework.Framew // mockCSI type mockCSIDriver struct { - driverInfo storageframework.DriverInfo - manifests []string - podInfo *bool - storageCapacity *bool - attachable bool - attachLimit int - enableTopology bool - enableNodeExpansion bool - hooks Hooks - tokenRequests []storagev1.TokenRequest - requiresRepublish *bool - fsGroupPolicy *storagev1.FSGroupPolicy - enableVolumeMountGroup bool - enableNodeVolumeCondition bool - embedded bool - calls MockCSICalls - embeddedCSIDriver *mockdriver.CSIDriver - enableSELinuxMount *bool - enableRecoverExpansionFailure bool - disableControllerExpansion bool + driverInfo storageframework.DriverInfo + manifests []string + podInfo *bool + storageCapacity *bool + attachable bool + attachLimit int + enableTopology bool + enableNodeExpansion bool + hooks Hooks + tokenRequests []storagev1.TokenRequest + requiresRepublish *bool + fsGroupPolicy *storagev1.FSGroupPolicy + enableVolumeMountGroup bool + enableNodeVolumeCondition bool + embedded bool + calls MockCSICalls + embeddedCSIDriver *mockdriver.CSIDriver + enableSELinuxMount *bool + disableControllerExpansion bool // Additional values set during PrepareTest clientSet clientset.Interface @@ -391,23 +390,22 @@ type MockCSITestDriver interface { // CSIMockDriverOpts defines options used for csi driver type CSIMockDriverOpts struct { - RegisterDriver bool - DisableAttach bool - PodInfo *bool - StorageCapacity *bool - AttachLimit int - EnableTopology bool - EnableResizing bool - EnableNodeExpansion bool - DisableControllerExpansion bool - EnableSnapshot bool - EnableVolumeMountGroup bool - EnableNodeVolumeCondition bool - TokenRequests []storagev1.TokenRequest - RequiresRepublish *bool - FSGroupPolicy *storagev1.FSGroupPolicy - EnableSELinuxMount *bool - EnableRecoverExpansionFailure bool + RegisterDriver bool + DisableAttach bool + PodInfo *bool + StorageCapacity *bool + AttachLimit int + EnableTopology bool + EnableResizing bool + EnableNodeExpansion bool + DisableControllerExpansion bool + EnableSnapshot bool + EnableVolumeMountGroup bool + EnableNodeVolumeCondition bool + TokenRequests []storagev1.TokenRequest + RequiresRepublish *bool + FSGroupPolicy *storagev1.FSGroupPolicy + EnableSELinuxMount *bool // Embedded defines whether the CSI mock driver runs // inside the cluster (false, the default) or just a proxy @@ -549,23 +547,22 @@ func InitMockCSIDriver(driverOpts CSIMockDriverOpts) MockCSITestDriver { storageframework.CapMultiplePVsSameID: true, }, }, - manifests: driverManifests, - podInfo: driverOpts.PodInfo, - storageCapacity: driverOpts.StorageCapacity, - enableTopology: driverOpts.EnableTopology, - attachable: !driverOpts.DisableAttach, - attachLimit: driverOpts.AttachLimit, - enableNodeExpansion: driverOpts.EnableNodeExpansion, - enableNodeVolumeCondition: driverOpts.EnableNodeVolumeCondition, - disableControllerExpansion: driverOpts.DisableControllerExpansion, - tokenRequests: driverOpts.TokenRequests, - requiresRepublish: driverOpts.RequiresRepublish, - fsGroupPolicy: driverOpts.FSGroupPolicy, - enableVolumeMountGroup: driverOpts.EnableVolumeMountGroup, - enableSELinuxMount: driverOpts.EnableSELinuxMount, - enableRecoverExpansionFailure: driverOpts.EnableRecoverExpansionFailure, - embedded: driverOpts.Embedded, - hooks: driverOpts.Hooks, + manifests: driverManifests, + podInfo: driverOpts.PodInfo, + storageCapacity: driverOpts.StorageCapacity, + enableTopology: driverOpts.EnableTopology, + attachable: !driverOpts.DisableAttach, + attachLimit: driverOpts.AttachLimit, + enableNodeExpansion: driverOpts.EnableNodeExpansion, + enableNodeVolumeCondition: driverOpts.EnableNodeVolumeCondition, + disableControllerExpansion: driverOpts.DisableControllerExpansion, + tokenRequests: driverOpts.TokenRequests, + requiresRepublish: driverOpts.RequiresRepublish, + fsGroupPolicy: driverOpts.FSGroupPolicy, + enableVolumeMountGroup: driverOpts.EnableVolumeMountGroup, + enableSELinuxMount: driverOpts.EnableSELinuxMount, + embedded: driverOpts.Embedded, + hooks: driverOpts.Hooks, } } @@ -722,10 +719,6 @@ func (m *mockCSIDriver) PrepareTest(ctx context.Context, f *framework.Framework) Features: map[string][]string{}, } - if m.enableRecoverExpansionFailure { - o.Features["csi-resizer"] = []string{"RecoverVolumeExpansionFailure=true"} - } - err = utils.CreateFromManifests(ctx, f, m.driverNamespace, func(item interface{}) error { if err := utils.PatchCSIDeployment(config.Framework, o, item); err != nil { return err