Skip to content

Commit f14bc98

Browse files
committed
add support for 100gb regional
1 parent 08b7635 commit f14bc98

File tree

2 files changed

+191
-5
lines changed

2 files changed

+191
-5
lines changed

pkg/csi_driver/controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ const (
6060
zonalSmallTierMaxSize = 9984 * util.Gb
6161
zonalLargeTierMinSize = 10 * util.Tb
6262
zonalLargeTierMaxSize = 100 * util.Tb
63-
regionalSmallTierMinSize = 1 * util.Tb
63+
regionalSmallTierMinSize = 100 * util.Gb
6464
regionalSmallTierMaxSize = 9984 * util.Gb
6565
regionalLargeTierMinSize = 10 * util.Tb
6666
regionalLargeTierMaxSize = 100 * util.Tb

pkg/csi_driver/controller_test.go

Lines changed: 190 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -766,7 +766,7 @@ func TestCreateVolume(t *testing.T) {
766766
},
767767
resp: &csi.CreateVolumeResponse{
768768
Volume: &csi.Volume{
769-
CapacityBytes: 1 * util.Tb,
769+
CapacityBytes: 100 * util.Gb,
770770
VolumeId: testVolumeID,
771771
VolumeContext: map[string]string{
772772
attrIP: testIP,
@@ -931,8 +931,153 @@ func TestValidateVolumeCapabilities(t *testing.T) {
931931
func TestControllerGetCapabilities(t *testing.T) {
932932
}
933933

934-
// TODO:
935934
func TestControllerExpandVolume(t *testing.T) {
935+
type testCase struct {
936+
name string
937+
currentSize int64
938+
requiredCap int64
939+
tier string
940+
shouldError bool
941+
}
942+
943+
cases := []testCase{
944+
{
945+
name: "expand zonal small tier within bounds",
946+
currentSize: 2 * util.Tb,
947+
requiredCap: 5 * util.Tb,
948+
tier: zonalTier,
949+
shouldError: false,
950+
},
951+
{
952+
name: "expand zonal from small to large tier",
953+
currentSize: zonalSmallTierMaxSize,
954+
requiredCap: 11 * util.Tb,
955+
tier: zonalTier,
956+
shouldError: true,
957+
},
958+
{
959+
name: "expand zonal within large tier bounds",
960+
currentSize: 11 * util.Tb,
961+
requiredCap: 50 * util.Tb,
962+
tier: zonalTier,
963+
shouldError: false,
964+
},
965+
{
966+
name: "expand regional small tier within bounds",
967+
currentSize: 500 * util.Gb,
968+
requiredCap: 2 * util.Tb,
969+
tier: regionalTier,
970+
shouldError: false,
971+
},
972+
{
973+
name: "expand regional from 100 GB (new minimum) within bounds",
974+
currentSize: regionalSmallTierMinSize,
975+
requiredCap: 500 * util.Gb,
976+
tier: regionalTier,
977+
shouldError: false,
978+
},
979+
{
980+
name: "expand regional from small to large tier",
981+
currentSize: regionalSmallTierMaxSize,
982+
requiredCap: 11 * util.Tb,
983+
tier: regionalTier,
984+
shouldError: true,
985+
},
986+
{
987+
name: "expand regional within large tier bounds",
988+
currentSize: 11 * util.Tb,
989+
requiredCap: 50 * util.Tb,
990+
tier: regionalTier,
991+
shouldError: false,
992+
},
993+
{
994+
name: "expand regional small tier at new minimum boundary",
995+
currentSize: regionalSmallTierMinSize,
996+
requiredCap: 3 * util.Tb,
997+
tier: regionalTier,
998+
shouldError: false,
999+
},
1000+
{
1001+
name: "expand regional just below max small tier",
1002+
currentSize: 9 * util.Tb,
1003+
requiredCap: 9500 * util.Gb,
1004+
tier: regionalTier,
1005+
shouldError: false,
1006+
},
1007+
{
1008+
name: "expand regional at max small tier to large tier",
1009+
currentSize: regionalSmallTierMaxSize,
1010+
requiredCap: regionalSmallTierMaxSize + 1,
1011+
tier: regionalTier,
1012+
shouldError: true,
1013+
},
1014+
}
1015+
1016+
for _, tc := range cases {
1017+
t.Run(tc.name, func(t *testing.T) {
1018+
// Create fake file service with an instance
1019+
fs, err := file.NewFakeService()
1020+
if err != nil {
1021+
t.Fatalf("failed to init fake file service: %v", err)
1022+
}
1023+
1024+
instanceName := "test-expand-instance"
1025+
_, err = fs.CreateInstance(context.Background(), &file.ServiceInstance{
1026+
Name: instanceName,
1027+
Location: testZone,
1028+
Tier: tc.tier,
1029+
Volume: file.Volume{Name: newInstanceVolume, SizeBytes: tc.currentSize},
1030+
})
1031+
if err != nil {
1032+
t.Fatalf("failed to create instance: %v", err)
1033+
}
1034+
1035+
// Create controller
1036+
cloudProvider, err := cloud.NewFakeCloud()
1037+
if err != nil {
1038+
t.Fatalf("failed to create cloud provider: %v", err)
1039+
}
1040+
1041+
ctrl := newControllerServer(&controllerServerConfig{
1042+
driver: initTestDriver(t),
1043+
fileService: fs,
1044+
cloud: cloudProvider,
1045+
volumeLocks: util.NewVolumeLocks(),
1046+
features: &GCFSDriverFeatureOptions{FeatureLockRelease: &FeatureLockRelease{}},
1047+
tagManager: cloud.NewFakeTagManager(),
1048+
})
1049+
1050+
// Create volumeID from instance
1051+
volumeID := getVolumeIDFromFileInstance(&file.ServiceInstance{
1052+
Name: instanceName,
1053+
Location: testZone,
1054+
Volume: file.Volume{Name: newInstanceVolume},
1055+
}, modeInstance)
1056+
1057+
// Call ControllerExpandVolume
1058+
req := &csi.ControllerExpandVolumeRequest{
1059+
VolumeId: volumeID,
1060+
CapacityRange: &csi.CapacityRange{
1061+
RequiredBytes: tc.requiredCap,
1062+
},
1063+
}
1064+
1065+
resp, err := ctrl.ControllerExpandVolume(context.Background(), req)
1066+
1067+
if tc.shouldError {
1068+
if err == nil {
1069+
t.Errorf("Test %q failed: expected error but got success", tc.name)
1070+
}
1071+
} else {
1072+
if err != nil {
1073+
t.Errorf("Test %q failed: expected success but got error: %v", tc.name, err)
1074+
}
1075+
if resp == nil {
1076+
t.Errorf("Test %q failed: expected non-nil response", tc.name)
1077+
}
1078+
}
1079+
})
1080+
}
9361081
}
9371082

9381083
func TestControllerModifyVolume_EmptyVolumeID(t *testing.T) {
@@ -1422,9 +1567,50 @@ func TestGetRequestCapacity(t *testing.T) {
14221567
bytes: 10 * util.Tb,
14231568
},
14241569
{
1425-
name: "required less than small REGIONAL minimum capacity",
1570+
name: "required equals small REGIONAL minimum capacity",
14261571
capRange: &csi.CapacityRange{
1427-
RequiredBytes: 100 * util.Gb,
1572+
RequiredBytes: regionalSmallTierMinSize,
1573+
},
1574+
tier: regionalTier,
1575+
bytes: regionalSmallTierMinSize,
1576+
},
1577+
{
1578+
name: "required 50 GB below small REGIONAL minimum capacity",
1579+
capRange: &csi.CapacityRange{
1580+
RequiredBytes: 50 * util.Gb,
1581+
},
1582+
tier: regionalTier,
1583+
bytes: regionalSmallTierMinSize,
1584+
},
1585+
{
1586+
name: "required 1 GB above small REGIONAL minimum capacity",
1587+
capRange: &csi.CapacityRange{
1588+
RequiredBytes: 101 * util.Gb,
1589+
},
1590+
tier: regionalTier,
1591+
bytes: 101 * util.Gb,
1592+
},
1593+
{
1594+
name: "limit equals small REGIONAL minimum capacity",
1595+
capRange: &csi.CapacityRange{
1596+
LimitBytes: regionalSmallTierMinSize,
1597+
},
1598+
tier: regionalTier,
1599+
bytes: regionalSmallTierMinSize,
1600+
},
1601+
{
1602+
name: "limit below small REGIONAL minimum capacity",
1603+
capRange: &csi.CapacityRange{
1604+
LimitBytes: 50 * util.Gb,
1605+
},
1606+
tier: regionalTier,
1607+
errorExpected: true,
1608+
},
1609+
{
1610+
name: "required below min, limit equals min REGIONAL",
1611+
capRange: &csi.CapacityRange{
1612+
RequiredBytes: 50 * util.Gb,
1613+
LimitBytes: regionalSmallTierMinSize,
14281614
},
14291615
tier: regionalTier,
14301616
bytes: regionalSmallTierMinSize,

0 commit comments

Comments
 (0)