Remove recovery related featuregates

This commit is contained in:
Hemant Kumar
2025-06-27 15:55:41 -04:00
parent fa6f27c8f7
commit d67e7937e6
4 changed files with 151 additions and 98 deletions

View File

@@ -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"))

View File

@@ -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 {

View File

@@ -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)
}

View File

@@ -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