Repository: kubernetes-sigs/gcp-compute-persistent-disk-csi-driver (go)

Issue:
N4 instances have wrong attach limit
N4 instances can use only hyperdisk-balanced disks and they have a different attach limit than regular "persistent disks": https://cloud.google.com/compute/docs/general-purpose-machines#disk_and_capacity_limits_2

The CSI driver should report 20 disks per n4-standard-2, now it reports 127.

Pull request:
Fix hyperdisk attach limits
**What type of PR is this?**
/kind bug

**What this PR does / why we need it**:
Reserve 1 attachment for the root / OS disk when reporting nr. of attachable hyperdisks.

**Which issue(s) this PR fixes**:
Fixes #1819

**Special notes for your reviewer**:

**Does this PR introduce a user-facing change?**:
<!--
If no, just write "NONE" in the release-note block below.
If yes, a release note is required:
Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required".
-->
```release-note
Fixed reporting of attachment limits of hyperdisks + gen4 VMs - reserving 1 attachment for the OS disk.
```


Patch:
diff --git a/pkg/common/constants.go b/pkg/common/constants.go
index 2ab74b77..94c7f5a6 100644
--- a/pkg/common/constants.go
+++ b/pkg/common/constants.go
@@ -67,10 +67,10 @@ var Gen4MachineHyperdiskAttachLimitMap = []struct {
 	max   int64
 	value int64
 }{
-	{max: 4, value: 16},
-	{max: 8, value: 24},
-	{max: 16, value: 32},
-	{max: 32, value: 48},
-	{max: 64, value: 64},
-	{max: 1024, value: 128},
+	{max: 4, value: 15},
+	{max: 8, value: 23},
+	{max: 16, value: 31},
+	{max: 32, value: 49},
+	{max: 64, value: 63},
+	{max: 1024, value: 127},
 }
diff --git a/pkg/gce-pd-csi-driver/node.go b/pkg/gce-pd-csi-driver/node.go
index c1fd96e3..3194c478 100644
--- a/pkg/gce-pd-csi-driver/node.go
+++ b/pkg/gce-pd-csi-driver/node.go
@@ -99,9 +99,9 @@ const (
 	volumeLimitSmall int64 = 15
 	volumeLimitBig   int64 = 127
 	// doc https://cloud.google.com/compute/docs/memory-optimized-machines#x4_disks
-	x4HyperdiskLimit int64 = 40
+	x4HyperdiskLimit int64 = 39
 	// doc https://cloud.google.com/compute/docs/accelerator-optimized-machines#a4-disks
-	a4HyperdiskLimit     int64 = 128
+	a4HyperdiskLimit     int64 = 127
 	defaultLinuxFsType         = "ext4"
 	defaultWindowsFsType       = "ntfs"
 	fsTypeExt3                 = "ext3"


Test patch:
diff --git a/pkg/gce-pd-csi-driver/node_test.go b/pkg/gce-pd-csi-driver/node_test.go
index 2de92447..63add2b0 100644
--- a/pkg/gce-pd-csi-driver/node_test.go
+++ b/pkg/gce-pd-csi-driver/node_test.go
@@ -271,27 +271,27 @@ func TestNodeGetVolumeLimits(t *testing.T) {
 		{
 			name:           "c4-standard-192",
 			machineType:    "c4-standard-192",
-			expVolumeLimit: 128,
+			expVolumeLimit: 127,
 		},
 		{
 			name:           "c4-standard-48",
 			machineType:    "c4-standard-48",
-			expVolumeLimit: 64,
+			expVolumeLimit: 63,
 		},
 		{
 			name:           "c4a-standard-4",
 			machineType:    "c4a-standard-4",
-			expVolumeLimit: 16,
+			expVolumeLimit: 15,
 		},
 		{
 			name:           "n4-standard-16",
 			machineType:    "n4-standard-16",
-			expVolumeLimit: 32,
+			expVolumeLimit: 31,
 		},
 		{
 			name:           "n4-highcpu-4",
 			machineType:    "n4-highcpu-4",
-			expVolumeLimit: 16,
+			expVolumeLimit: 15,
 		},
 		{
 			name:           "invalid gen4 machine type",