Repository: kubernetes-sigs/gcp-compute-persistent-disk-csi-driver
Pull request #1869 (2024-11-12 21:05:25)

Revert "Automated cherry pick of #1826: Add ControllerModifyVolume E2E tests#1836: Create documentation for ControllerModifyVolume and controller default#1838: Enable VolumeAttributesClass feature gate for CI runs#1841: Update logic to use SI for VACs"
Reverts kubernetes-sigs/gcp-compute-persistent-disk-csi-driver#1861 to unblock the release pipeline.

```release-note
NONE
```


Patch:
diff --git a/deploy/kubernetes/base/controller/controller.yaml b/deploy/kubernetes/base/controller/controller.yaml
index ef2a665b..a9fa141e 100644
--- a/deploy/kubernetes/base/controller/controller.yaml
+++ b/deploy/kubernetes/base/controller/controller.yaml
@@ -141,8 +141,6 @@ spec:
           args:
             - "--v=5"
             - "--endpoint=unix:/csi/csi.sock"
-            - "--supports-dynamic-iops-provisioning=hyperdisk-balanced,hyperdisk-extreme"
-            - "--supports-dynamic-throughput-provisioning=hyperdisk-balanced,hyperdisk-throughput,hyperdisk-ml"
           env:
             - name: GOOGLE_APPLICATION_CREDENTIALS
               value: "/etc/cloud-sa/cloud-sa.json"
diff --git a/deploy/kubernetes/images/prow-stable-sidecar-rc-master/image.yaml b/deploy/kubernetes/images/prow-stable-sidecar-rc-master/image.yaml
index 74792417..6f305229 100644
--- a/deploy/kubernetes/images/prow-stable-sidecar-rc-master/image.yaml
+++ b/deploy/kubernetes/images/prow-stable-sidecar-rc-master/image.yaml
@@ -7,7 +7,7 @@ metadata:
   name: imagetag-csi-provisioner-prow-rc
 imageTag:
   name: registry.k8s.io/sig-storage/csi-provisioner
-  newTag: "v5.1.0"
+  newTag: "v3.4.0"
 ---
 apiVersion: builtin
 kind: ImageTagTransformer
@@ -15,7 +15,7 @@ metadata:
   name: imagetag-csi-attacher-prow-rc
 imageTag:
   name: registry.k8s.io/sig-storage/csi-attacher
-  newTag: "v4.4.3"
+  newTag: "v4.2.0"
 ---
 apiVersion: builtin
 kind: ImageTagTransformer
@@ -23,7 +23,7 @@ metadata:
   name: imagetag-csi-resize-prow-rc
 imageTag:
   name: registry.k8s.io/sig-storage/csi-resizer
-  newTag: "v1.11.1"
+  newTag: "v1.7.0"
 ---
 apiVersion: builtin
 kind: ImageTagTransformer
@@ -31,7 +31,7 @@ metadata:
   name: imagetag-csi-snapshotter-prow-head
 imageTag:
   name: registry.k8s.io/sig-storage/csi-snapshotter
-  newTag: "v6.3.3"
+  newTag: "v6.1.0"
 ---
 apiVersion: builtin
 kind: ImageTagTransformer
@@ -39,7 +39,7 @@ metadata:
   name: imagetag-csi-node-registrar-prow-rc
 imageTag:
   name: registry.k8s.io/sig-storage/csi-node-driver-registrar
-  newTag: "v2.9.3"
+  newTag: "v2.7.0"
 ---
 apiVersion: builtin
 kind: ImageTagTransformer
@@ -48,6 +48,6 @@ metadata:
 imageTag:
   name: registry.k8s.io/cloud-provider-gcp/gcp-compute-persistent-disk-csi-driver
   newName: gcr.io/k8s-staging-cloud-provider-gcp/gcp-compute-persistent-disk-csi-driver
-  newTag: "v1.15.0-rc1"
+  newTag: "v1.14.2-rc1"
 ---
 
diff --git a/deploy/kubernetes/overlays/dev/driver-args.yaml b/deploy/kubernetes/overlays/dev/driver-args.yaml
new file mode 100644
index 00000000..c8db2b93
--- /dev/null
+++ b/deploy/kubernetes/overlays/dev/driver-args.yaml
@@ -0,0 +1,7 @@
+- op: add
+  path: /spec/template/spec/containers/0/args/-
+  value: --supports-dynamic-throughput-provisioning=hyperdisk-balanced,hyperdisk-throughput,hyperdisk-ml
+
+- op: add
+  path: /spec/template/spec/containers/0/args/-
+  value: --supports-dynamic-iops-provisioning=hyperdisk-balanced,hyperdisk-extreme
\ No newline at end of file
diff --git a/deploy/kubernetes/overlays/dev/kustomization.yaml b/deploy/kubernetes/overlays/dev/kustomization.yaml
index f6ffff39..03861055 100644
--- a/deploy/kubernetes/overlays/dev/kustomization.yaml
+++ b/deploy/kubernetes/overlays/dev/kustomization.yaml
@@ -9,6 +9,14 @@ resources:
 # Here dev overlay is using the same image as alpha
 transformers:
 - ../../images/stable-master
+# Apply patches to support dynamic provisioning for hyperdisks
+patches:
+- path: ./driver-args.yaml
+  target:
+    group: apps
+    version: v1
+    kind: Deployment
+    name: csi-gce-pd-controller
 # To change the dev image, add something like the following.
 #images:
 #- name: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
diff --git a/docs/kubernetes/user-guides/volume-attributes-class.md b/docs/kubernetes/user-guides/volume-attributes-class.md
deleted file mode 100644
index 61623125..00000000
--- a/docs/kubernetes/user-guides/volume-attributes-class.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# VolumeAttributesClass User Guide
-
->**Attention:** VolumeAttributesClass is a Kubernetes Beta feature since v1.31, but was initially introduced as an alpha feature in v1.29. See [this blog post](https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/) for more information on VolumeAttributesClasses and how to enable the feature gate.
-
-### VolumeAttributesClass Example
-
-This example provisions a hyperdisk-balanced and then updates its IOPS and throughput.
-
-1. Create the VolumeAttributesClasses (VACs), PVC, Storage Classes, and Pod
-``` 
-$ kubectl apply -f ./examples/kubernetes/demo-vol-create.yaml
-```
-
-This creates the VACs silver and gold, with the VAC for silver being the initial metadata for the PV and gold representing the update. This file also create a storage class test-sc. Note that the IOPS/throughput takes priority from the VACs if they are different. Then, a PVC is created, specifying the storage class for the PV being test-sc and the VAC being silver. Finally, a pod is created with the volume being created from the PVC we defined.
-
-2. Verify the PV is properly created
-```
-$ kubectl get pvc
-NAME        STATUS    VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS    AGE
-test-pvc     Bound     {pv-name}   64Gi       RWO            test-sc        silver                   {some-time}
-```
-
-3. Update the IOPS/throughput for the created PV
-```
-$ kubectl apply -f ./examples/kubernetes/demo-vol-update.yaml
-```
-
-4. Verify the PV VAC is properly updated
-```
-$ kubectl get pvc
-NAME        STATUS    VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS    AGE
-test-pvc     Bound     {pv-name}   64Gi       RWO            test-sc        gold                   {some-time}
-```
-
-After verifying the VAC is updated from the PV, we can check that the IOPS and throughput are properly updated.
-
-```
-$ gcloud compute disks describe {pv-name} --zone={pv-zone}
-```
-
-Ensure that the provisionedIops and provisionedThroughput fields match those from the gold VAC. Note that it will take a few minutes for the value updates to be reflected 
\ No newline at end of file
diff --git a/examples/kubernetes/demo-vol-create.yaml b/examples/kubernetes/demo-vol-create.yaml
deleted file mode 100644
index 5fa53604..00000000
--- a/examples/kubernetes/demo-vol-create.yaml
+++ /dev/null
@@ -1,59 +0,0 @@
-apiVersion: storage.k8s.io/v1
-kind: StorageClass
-metadata:
-  name: test-sc
-provisioner: pd.csi.storage.gke.io
-parameters:
-  type: "hyperdisk-balanced"
-  provisioned-iops-on-create: "3000"
-  provisioned-throughput-on-create: "150Mi"
-volumeBindingMode: WaitForFirstConsumer
----
-apiVersion: storage.k8s.io/v1beta1
-kind: VolumeAttributesClass
-metadata:
-  name: silver
-driverName: pd.csi.storage.gke.io
-parameters:
-  iops: "3000"
-  throughput: "150Mi"
----
-apiVersion: storage.k8s.io/v1beta1
-kind: VolumeAttributesClass
-metadata:
-  name: gold
-driverName: pd.csi.storage.gke.io
-parameters:
-  iops: "3013"
-  throughput: "151Mi"
----
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
-  name: test-pvc
-spec:
-  storageClassName: test-sc
-  volumeAttributesClassName: silver
-  accessModes:
-    - ReadWriteOnce
-  resources:
-    requests:
-      storage: 64Gi
----
-apiVersion: v1
-kind: Pod
-metadata:
-  name: nginx
-spec:
-  volumes:
-  - name: vol
-    persistentVolumeClaim:
-      claimName: test-pvc
-  containers:
-  - name: nginx
-    image: nginx:1.14.2
-    ports:
-    - containerPort: 80
-    volumeMounts:
-    - mountPath: "/vol"
-      name: vol
\ No newline at end of file
diff --git a/examples/kubernetes/demo-vol-update.yaml b/examples/kubernetes/demo-vol-update.yaml
deleted file mode 100644
index 72857a3e..00000000
--- a/examples/kubernetes/demo-vol-update.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
-  name: test-pvc
-spec:
-  storageClassName: test-sc
-  volumeAttributesClassName: gold
-  accessModes:
-    - ReadWriteOnce
-  resources:
-    requests:
-      storage: 64Gi
\ No newline at end of file
diff --git a/examples/kubernetes/demo-vol-update.yml b/examples/kubernetes/demo-vol-update.yml
new file mode 100644
index 00000000..e82aa3e1
--- /dev/null
+++ b/examples/kubernetes/demo-vol-update.yml
@@ -0,0 +1,99 @@
+apiVersion: storage.k8s.io/v1beta1
+kind: VolumeAttributesClass
+metadata:
+  name: silver
+driverName: pd.csi.storage.gke.io
+parameters:
+  throughput: "350"
+  iops: "6000"
+---
+apiVersion: storage.k8s.io/v1beta1
+kind: VolumeAttributesClass
+metadata:
+  name: gold
+driverName: pd.csi.storage.gke.io
+parameters:
+  throughput: "550"
+  iops: "15000"
+---
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+  name: balanced
+provisioner: pd.csi.storage.gke.io
+allowVolumeExpansion: true
+volumeBindingMode: WaitForFirstConsumer
+parameters:
+  type: hyperdisk-balanced
+  provisioned-throughput-on-create: "300Mi"
+  provisioned-iops-on-create: "5000"
+---
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+  name: throughput-optimized
+provisioner: pd.csi.storage.gke.io
+volumeBindingMode: WaitForFirstConsumer
+allowVolumeExpansion: true
+parameters:
+  type: hyperdisk-balanced
+  provisioned-throughput-on-create: "500Mi"
+  provisioned-iops-on-create: "10000"
+
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: balanced-pvc
+spec:
+  volumeAttributesClassName: silver
+  storageClassName: balanced
+  accessModes:
+    - ReadWriteOnce
+  resources:
+    requests:
+      storage: 256Gi
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: throughput-optimized-pvc
+spec:
+  volumeAttributesClassName: silver
+  storageClassName: throughput-optimized
+  accessModes:
+    - ReadWriteOnce
+  resources:
+    requests:
+      storage: 256Gi
+---
+kind: Pod
+apiVersion: v1
+metadata:
+  name: pod-demo
+spec:
+  volumes:
+    - name: pvc-demo-vol
+      persistentVolumeClaim:
+       claimName: balanced-pvc
+    - name: data-vol
+      persistentVolumeClaim:
+        claimName: throughput-optimized-pvc
+  containers:
+    - name: pod-demo
+      image: nginx:latest
+      resources:
+        limits:
+          cpu: 10m
+          memory: 80Mi
+        requests:
+          cpu: 10m
+          memory: 80Mi
+      ports:
+        - containerPort: 80
+          name: "http-server"
+      volumeMounts:
+        - mountPath: "/usr/share/nginx/html"
+          name: pvc-demo-vol
+        - mountPath: "/data"
+          name: data-vol
diff --git a/pkg/common/parameters.go b/pkg/common/parameters.go
index 87283719..e80346ed 100644
--- a/pkg/common/parameters.go
+++ b/pkg/common/parameters.go
@@ -343,7 +343,7 @@ func ExtractModifyVolumeParameters(parameters map[string]string) (ModifyVolumePa
 			}
 			modifyVolumeParams.IOPS = &iops
 		case "throughput":
-			throughput, err := ConvertMiStringToInt64(value)
+			throughput, err := ConvertStringToInt64(value)
 			if err != nil {
 				return ModifyVolumeParameters{}, fmt.Errorf("parameters contain invalid throughput parameter: %w", err)
 			}


Test patch:
diff --git a/pkg/common/parameters_test.go b/pkg/common/parameters_test.go
index 35a11632..cb60ecff 100644
--- a/pkg/common/parameters_test.go
+++ b/pkg/common/parameters_test.go
@@ -485,7 +485,7 @@ func TestSnapshotParameters(t *testing.T) {
 func TestExtractModifyVolumeParameters(t *testing.T) {
 	parameters := map[string]string{
 		"iops":       "1000",
-		"throughput": "500Mi",
+		"throughput": "500",
 	}
 
 	iops := int64(1000)
diff --git a/pkg/gce-pd-csi-driver/controller_test.go b/pkg/gce-pd-csi-driver/controller_test.go
index 06db7222..0e79a366 100644
--- a/pkg/gce-pd-csi-driver/controller_test.go
+++ b/pkg/gce-pd-csi-driver/controller_test.go
@@ -1789,7 +1789,7 @@ func TestCreateVolumeWithVolumeAttributeClassParameters(t *testing.T) {
 						},
 					},
 				},
-				MutableParameters: map[string]string{"iops": "20000", "throughput": "600Mi"},
+				MutableParameters: map[string]string{"iops": "20000", "throughput": "600"},
 			},
 			expIops:       20000,
 			expThroughput: 600,
@@ -1822,7 +1822,7 @@ func TestCreateVolumeWithVolumeAttributeClassParameters(t *testing.T) {
 						},
 					},
 				},
-				MutableParameters: map[string]string{"iops": "20000", "throughput": "600Mi"},
+				MutableParameters: map[string]string{"iops": "20000", "throughput": "600"},
 			},
 			expIops:       0,
 			expThroughput: 0,
@@ -1890,7 +1890,7 @@ func TestVolumeModifyOperation(t *testing.T) {
 			name: "Update volume with valid parameters",
 			req: &csi.ControllerModifyVolumeRequest{
 				VolumeId:          testVolumeID,
-				MutableParameters: map[string]string{"iops": "20000", "throughput": "600Mi"},
+				MutableParameters: map[string]string{"iops": "20000", "throughput": "600"},
 			},
 			diskType: "hyperdisk-balanced",
 			params: &common.DiskParameters{
@@ -1906,7 +1906,7 @@ func TestVolumeModifyOperation(t *testing.T) {
 			name: "Update volume with invalid parameters",
 			req: &csi.ControllerModifyVolumeRequest{
 				VolumeId:          testVolumeID,
-				MutableParameters: map[string]string{"iops": "0", "throughput": "0Mi"},
+				MutableParameters: map[string]string{"iops": "0", "throughput": "0"},
 			},
 			diskType: "hyperdisk-balanced",
 			params: &common.DiskParameters{
@@ -1922,7 +1922,7 @@ func TestVolumeModifyOperation(t *testing.T) {
 			name: "Update volume with valid parameters but invalid disk type",
 			req: &csi.ControllerModifyVolumeRequest{
 				VolumeId:          testVolumeID,
-				MutableParameters: map[string]string{"iops": "20000", "throughput": "600Mi"},
+				MutableParameters: map[string]string{"iops": "20000", "throughput": "600"},
 			},
 			diskType: "pd-ssd",
 			params: &common.DiskParameters{
@@ -2053,7 +2053,7 @@ func TestVolumeModifyErrorHandling(t *testing.T) {
 				},
 			},
 			modifyReq: &csi.ControllerModifyVolumeRequest{
-				MutableParameters: map[string]string{"iops": "3001", "throughput": "151Mi"},
+				MutableParameters: map[string]string{"iops": "3001", "throughput": "151"},
 			},
 			modifyVolumeErrors: map[*meta.Key]error{
 				meta.ZonalKey(name, "us-central1-a"): &googleapi.Error{
@@ -2089,7 +2089,7 @@ func TestVolumeModifyErrorHandling(t *testing.T) {
 				},
 			},
 			modifyReq: &csi.ControllerModifyVolumeRequest{
-				MutableParameters: map[string]string{"iops": "10000", "throughput": "2400Mi"},
+				MutableParameters: map[string]string{"iops": "10000", "throughput": "2400"},
 			},
 			modifyVolumeErrors: map[*meta.Key]error{
 				meta.ZonalKey(name, "us-central1-a"): &googleapi.Error{Code: int(codes.InvalidArgument), Message: "InvalidArgument"},
diff --git a/test/e2e/tests/single_zone_e2e_test.go b/test/e2e/tests/single_zone_e2e_test.go
index c77c7b91..df7cb78d 100644
--- a/test/e2e/tests/single_zone_e2e_test.go
+++ b/test/e2e/tests/single_zone_e2e_test.go
@@ -17,10 +17,8 @@ package tests
 import (
 	"context"
 	"fmt"
-	"os"
 	"path/filepath"
 	"regexp"
-	"strconv"
 	"strings"
 	"time"
 
@@ -46,36 +44,26 @@ import (
 const (
 	testNamePrefix = "gcepd-csi-e2e-"
 
-	defaultSizeGb                       int64 = 5
-	defaultExtremeSizeGb                int64 = 500
-	defaultHdBSizeGb                    int64 = 100
-	defaultHdXSizeGb                    int64 = 100
-	defaultHdTSizeGb                    int64 = 2048
-	defaultHdmlSizeGb                   int64 = 200
-	defaultRepdSizeGb                   int64 = 200
-	defaultMwSizeGb                     int64 = 200
-	defaultVolumeLimit                  int64 = 127
-	invalidSizeGb                       int64 = 66000
-	readyState                                = "READY"
-	standardDiskType                          = "pd-standard"
-	ssdDiskType                               = "pd-ssd"
-	extremeDiskType                           = "pd-extreme"
-	hdbDiskType                               = "hyperdisk-balanced"
-	hdxDiskType                               = "hyperdisk-extreme"
-	hdtDiskType                               = "hyperdisk-throughput"
-	hdmlDiskType                              = "hyperdisk-ml"
-	provisionedIOPSOnCreate                   = "12345"
-	provisionedIOPSOnCreateInt                = int64(12345)
-	provisionedIOPSOnCreateDefaultInt         = int64(100000)
-	provisionedIOPSOnCreateHdb                = "3000"
-	provisionedIOPSOnCreateHdbInt             = int64(3000)
-	provisionedIOPSOnCreateHdx                = "200"
-	provisionedIOPSOnCreateHdxInt             = int64(200)
-	provisionedThroughputOnCreate             = "66Mi"
-	provisionedThroughputOnCreateInt          = int64(66)
-	provisionedThroughputOnCreateHdb          = "150Mi"
-	provisionedThroughputOnCreateHdbInt       = int64(150)
-	defaultEpsilon                            = 500000000 // 500M
+	defaultSizeGb                     int64 = 5
+	defaultExtremeSizeGb              int64 = 500
+	defaultHdTSizeGb                  int64 = 2048
+	defaultHdmlSizeGb                 int64 = 200
+	defaultRepdSizeGb                 int64 = 200
+	defaultMwSizeGb                   int64 = 200
+	defaultVolumeLimit                int64 = 127
+	invalidSizeGb                     int64 = 66000
+	readyState                              = "READY"
+	standardDiskType                        = "pd-standard"
+	ssdDiskType                             = "pd-ssd"
+	extremeDiskType                         = "pd-extreme"
+	hdtDiskType                             = "hyperdisk-throughput"
+	hdmlDiskType                            = "hyperdisk-ml"
+	provisionedIOPSOnCreate                 = "12345"
+	provisionedIOPSOnCreateInt              = int64(12345)
+	provisionedIOPSOnCreateDefaultInt       = int64(100000)
+	provisionedThroughputOnCreate           = "66Mi"
+	provisionedThroughputOnCreateInt        = int64(66)
+	defaultEpsilon                          = 500000000 // 500M
 )
 
 var _ = Describe("GCE PD CSI Driver", func() {
@@ -1561,88 +1549,6 @@ var _ = Describe("GCE PD CSI Driver", func() {
 		Entry("with missing multi-zone label", multiZoneTestConfig{diskType: standardDiskType, readOnly: true, hasMultiZoneLabel: false, wantErrSubstring: "points to disk that is missing label \"goog-gke-multi-zone\""}),
 		Entry("with unsupported disk-type pd-extreme", multiZoneTestConfig{diskType: extremeDiskType, readOnly: true, hasMultiZoneLabel: true, wantErrSubstring: "points to disk with unsupported disk type"}),
 	)
-
-	// Mark tests as pending while VolumeAttributesClasses are in beta
-	DescribeTable("Should update metadata when providing valid metadata",
-		func(
-			diskType string,
-			diskSize int64,
-			initialIops *string,
-			initialThroughput *string,
-			updatedIops *string,
-			updatedThroughput *string,
-		) {
-			if !runCMVTests() {
-				Skip("Not running ControllerModifyVolume tests, as RUN_CONTROLLER_MODIFY_VOLUME_TESTS is falsy")
-			}
-			Expect(testContexts).ToNot(BeEmpty())
-			testContext := getRandomTestContext()
-
-			client := testContext.Client
-			instance := testContext.Instance
-			p, z, _ := instance.GetIdentity()
-
-			volName, volId := createAndValidateUniqueZonalDisk(client, p, z, diskType)
-			defer func() {
-				err := client.DeleteVolume(volId)
-				Expect(err).To(BeNil(), "DeleteVolume failed")
-			}()
-
-			// Validate disk created
-			_, err := computeService.Disks.Get(p, z, volName).Do()
-			Expect(err).To(BeNil(), "Could not get disk from cloud directly")
-
-			mutableParams := map[string]string{}
-			if updatedIops != nil {
-				mutableParams["iops"] = *updatedIops
-			}
-			if updatedThroughput != nil {
-				mutableParams["throughput"] = *updatedThroughput
-			}
-			err = client.ControllerModifyVolume(volId, mutableParams)
-			Expect(err).To(BeNil(), "Expected ControllerModifyVolume to succeed")
-
-			err = waitForMetadataUpdate(6, p, z, volName, initialIops, initialThroughput)
-			Expect(err).To(BeNil(), "Expected ControllerModifyVolume to update metadata")
-
-			// Assert ControllerModifyVolume successfully updated metadata
-			disk, err := computeService.Disks.Get(p, z, volName).Do()
-			Expect(err).To(BeNil(), "Could not get disk from cloud directly")
-			if updatedIops != nil {
-				Expect(strconv.FormatInt(disk.ProvisionedIops, 10)).To(Equal(*updatedIops))
-			}
-			if updatedThroughput != nil {
-				Expect(strconv.FormatInt(disk.ProvisionedThroughput, 10)).To(Equal(*updatedThroughput))
-			}
-		},
-		Entry(
-			"for hyperdisk-balanced",
-			hdbDiskType,
-			defaultHdBSizeGb,
-			stringPtr(provisionedIOPSOnCreateHdb),
-			stringPtr(provisionedThroughputOnCreateHdb),
-			stringPtr("3013"),
-			stringPtr("181Mi"),
-		),
-		Entry(
-			"for hyperdisk-extreme",
-			hdxDiskType,
-			defaultHdXSizeGb,
-			stringPtr(provisionedIOPSOnCreateHdx),
-			nil,
-			stringPtr("250"),
-			nil,
-		),
-		Entry(
-			"for hyperdisk-throughput",
-			hdtDiskType,
-			defaultHdTSizeGb,
-			nil,
-			stringPtr(provisionedThroughputOnCreate),
-			nil,
-			stringPtr("70Mi"),
-		),
-	)
 })
 
 func equalWithinEpsilon(a, b, epsiolon int64) bool {
@@ -1665,10 +1571,6 @@ func createAndValidateZonalDisk(client *remote.CsiClient, project, zone string,
 	switch diskType {
 	case extremeDiskType:
 		diskSize = defaultExtremeSizeGb
-	case hdbDiskType:
-		diskSize = defaultHdBSizeGb
-	case hdxDiskType:
-		diskSize = defaultHdXSizeGb
 	case hdtDiskType:
 		diskSize = defaultHdTSizeGb
 	case hdmlDiskType:
@@ -1835,28 +1737,6 @@ var typeToDisk = map[string]*disk{
 			Expect(disk.ProvisionedIops).To(Equal(provisionedIOPSOnCreateInt))
 		},
 	},
-	hdbDiskType: {
-		params: map[string]string{
-			common.ParameterKeyType:                          hdbDiskType,
-			common.ParameterKeyProvisionedIOPSOnCreate:       provisionedIOPSOnCreateHdb,
-			common.ParameterKeyProvisionedThroughputOnCreate: provisionedThroughputOnCreateHdb,
-		},
-		validate: func(disk *compute.Disk) {
-			Expect(disk.Type).To(ContainSubstring(hdbDiskType))
-			Expect(disk.ProvisionedIops).To(Equal(provisionedIOPSOnCreateHdbInt))
-			Expect(disk.ProvisionedThroughput).To(Equal(provisionedThroughputOnCreateHdbInt))
-		},
-	},
-	hdxDiskType: {
-		params: map[string]string{
-			common.ParameterKeyType:                    hdxDiskType,
-			common.ParameterKeyProvisionedIOPSOnCreate: provisionedIOPSOnCreateHdx,
-		},
-		validate: func(disk *compute.Disk) {
-			Expect(disk.Type).To(ContainSubstring(hdxDiskType))
-			Expect(disk.ProvisionedIops).To(Equal(provisionedIOPSOnCreateHdxInt))
-		},
-	},
 	hdtDiskType: {
 		params: map[string]string{
 			common.ParameterKeyType:                          hdtDiskType,
@@ -1895,49 +1775,3 @@ func merge(a, b map[string]string) map[string]string {
 	}
 	return res
 }
-
-func runCMVTests() bool {
-	runCMVStr, ok := os.LookupEnv("RUN_CONTROLLER_MODIFY_VOLUME_TESTS")
-	if !ok {
-		return false
-	}
-
-	runCMVTests, err := strconv.ParseBool(runCMVStr)
-	if err != nil {
-		return false
-	}
-
-	return runCMVTests
-}
-
-func stringPtr(str string) *string {
-	return &str
-}
-
-// waitForMetadataUpdate tries to poll every minute until numMinutes and tests if IOPS/throughput are updated
-func waitForMetadataUpdate(numMinutes int, project, zone, volName string, initialIops *string, initialThroughput *string) error {
-	backoff := wait.Backoff{
-		Duration: 1 * time.Minute,
-		Factor:   1.0,
-		Steps:    numMinutes,
-		Cap:      time.Duration(numMinutes) * time.Minute,
-	}
-	err := wait.ExponentialBackoffWithContext(context.Background(), backoff, func() (bool, error) {
-		disk, err := computeService.Disks.Get(project, zone, volName).Do()
-		if err != nil {
-			return false, nil
-		}
-		if initialIops != nil && strconv.FormatInt(disk.ProvisionedIops, 10) != *initialIops {
-			return true, nil
-		}
-		if initialThroughput != nil {
-			throughput := *initialThroughput
-			// Strip "Mi" from throughput
-			if len(throughput) > 2 && strconv.FormatInt(disk.ProvisionedThroughput, 10) != throughput[:len(throughput)-2] {
-				return true, nil
-			}
-		}
-		return false, nil
-	})
-	return err
-}
diff --git a/test/e2e/utils/utils.go b/test/e2e/utils/utils.go
index ec905c89..293b8076 100644
--- a/test/e2e/utils/utils.go
+++ b/test/e2e/utils/utils.go
@@ -66,8 +66,6 @@ func GCEClientAndDriverSetup(instance *remote.InstanceInfo, driverConfig DriverC
 		"--multi-zone-volume-handle-disk-types=pd-standard,hyperdisk-ml",
 		"--use-instance-api-to-poll-attachment-disk-types=pd-ssd",
 		"--use-instance-api-to-list-volumes-published-nodes",
-		"--supports-dynamic-iops-provisioning=hyperdisk-balanced,hyperdisk-extreme",
-		"--supports-dynamic-throughput-provisioning=hyperdisk-balanced,hyperdisk-throughput,hyperdisk-ml",
 		fmt.Sprintf("--fallback-requisite-zones=%s", strings.Join(driverConfig.Zones, ",")),
 	}
 	extra_flags = append(extra_flags, fmt.Sprintf("--compute-endpoint=%s", driverConfig.ComputeEndpoint))
diff --git a/test/k8s-integration/config/hdb-volumeattributesclass.yaml b/test/k8s-integration/config/hdb-volumeattributesclass.yaml
index 73d5ff4f..f032912d 100644
--- a/test/k8s-integration/config/hdb-volumeattributesclass.yaml
+++ b/test/k8s-integration/config/hdb-volumeattributesclass.yaml
@@ -5,4 +5,4 @@ metadata:
 driverName: pd.csi.storage.gke.io
 parameters:
   iops: "3600"
-  throughput: "290Mi"
\ No newline at end of file
+  throughput: "290"
\ No newline at end of file
diff --git a/test/run-e2e.sh b/test/run-e2e.sh
index 0775ac69..812f7143 100755
--- a/test/run-e2e.sh
+++ b/test/run-e2e.sh
@@ -5,9 +5,4 @@ set -x
 
 readonly PKGDIR=sigs.k8s.io/gcp-compute-persistent-disk-csi-driver
 
-TIMEOUT=30m
-if [ "$RUN_CONTROLLER_MODIFY_VOLUME_TESTS" = true ]; then
-    TIMEOUT=45m
-fi
-
-go test --timeout "${TIMEOUT}" --v "${PKGDIR}/test/e2e/tests" --run-in-prow=true --delete-instances=true --logtostderr $@
+go test --timeout 30m --v "${PKGDIR}/test/e2e/tests" --run-in-prow=true --delete-instances=true --logtostderr $@
diff --git a/test/run-k8s-integration-ci.sh b/test/run-k8s-integration-ci.sh
index 2dcd9298..90a1051d 100755
--- a/test/run-k8s-integration-ci.sh
+++ b/test/run-k8s-integration-ci.sh
@@ -117,11 +117,4 @@ else
   base_cmd="${base_cmd} --snapshotclass-files=pd-volumesnapshotclass.yaml"
 fi
 
-if [ "$test_volumeattributesclass" = true ]; then
-  base_cmd="${base_cmd} --volumeattributesclass-files=hdb-volumeattributesclass.yaml --storageclass-for-vac-file=sc-hdb.yaml --kube-runtime-config=api/all=true"
-  if [ "$deployment_strategy" = "gce" ]; then
-    base_cmd="${base_cmd} --kube-feature-gates=VolumeAttributesClass=true"
-  fi
-fi
-
 eval "$base_cmd"