Skip to content

Commit 10a49df

Browse files
authored
Merge pull request #541 from Jiawei0227/mismatch
fix volume size mismatch between driver and PV
2 parents 41af8a3 + 875f274 commit 10a49df

File tree

2 files changed

+38
-54
lines changed

2 files changed

+38
-54
lines changed

pkg/controller/controller.go

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"context"
2121
"errors"
2222
"fmt"
23-
"math"
2423
"os"
2524
"strings"
2625
"time"
@@ -810,7 +809,7 @@ func (p *csiProvisioner) Provision(ctx context.Context, options controller.Provi
810809
AccessModes: options.PVC.Spec.AccessModes,
811810
MountOptions: options.StorageClass.MountOptions,
812811
Capacity: v1.ResourceList{
813-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(respCap),
812+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(respCap),
814813
},
815814
// TODO wait for CSI VolumeSource API
816815
PersistentVolumeSource: v1.PersistentVolumeSource{
@@ -1641,24 +1640,9 @@ func getCredentials(ctx context.Context, k8s kubernetes.Interface, ref *v1.Secre
16411640
return credentials, nil
16421641
}
16431642

1644-
func bytesToGiQuantity(bytes int64) resource.Quantity {
1645-
var num int64
1646-
var floatBytes, MiB, GiB float64
1647-
var suffix string
1648-
floatBytes = float64(bytes)
1649-
MiB = 1024 * 1024
1650-
GiB = MiB * 1024
1651-
// Need to give Quantity nice whole numbers or else it
1652-
// sometimes spits out the value in milibytes. We round up.
1653-
if floatBytes < GiB {
1654-
num = int64(math.Ceil(floatBytes / MiB))
1655-
suffix = "Mi"
1656-
} else {
1657-
num = int64(math.Ceil(floatBytes / GiB))
1658-
suffix = "Gi"
1659-
}
1660-
stringQuantity := fmt.Sprintf("%v%s", num, suffix)
1661-
return resource.MustParse(stringQuantity)
1643+
func bytesToQuantity(bytes int64) resource.Quantity {
1644+
quantity := resource.NewQuantity(bytes, resource.BinarySI)
1645+
return *quantity
16621646
}
16631647

16641648
func deprecationWarning(deprecatedParam, newParam, removalVersion string) string {

pkg/controller/controller_test.go

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -361,35 +361,35 @@ func TestBytesToQuantity(t *testing.T) {
361361
quantString string
362362
}{
363363
{
364-
"Gibibyte rounding up from above .5",
364+
"Gibibyte that cannot be put into any nice format without loss precision",
365365
5.56 * 1024 * 1024 * 1024,
366-
"6Gi",
366+
"5970004541",
367367
},
368368
{
369-
"Gibibyte rounding up from below .5",
370-
5.23 * 1024 * 1024 * 1024,
371-
"6Gi",
369+
"Gibibyte that can be parsed nicer",
370+
5.5 * 1024 * 1024 * 1024,
371+
"5632Mi",
372372
},
373373
{
374374
"Gibibyte exact",
375375
5 * 1024 * 1024 * 1024,
376376
"5Gi",
377377
},
378378
{
379-
"Mebibyte rounding up from below .5",
379+
"Mebibyte that cannot be parsed nicer",
380380
5.23 * 1024 * 1024,
381-
"6Mi",
381+
"5484052",
382382
},
383383
{
384-
"Mebibyte/Gibibyte barrier (Quantity type rounds this)",
385-
// (1024 * 1024 * 1024) - 1
386-
1073741823,
387-
"1Gi",
384+
"Kibibyte that can be parsed nicer",
385+
// (100 * 1024)
386+
102400,
387+
"100Ki",
388388
},
389389
}
390390

391391
for _, test := range tests {
392-
q := bytesToGiQuantity(int64(test.bytes))
392+
q := bytesToQuantity(int64(test.bytes))
393393
if q.String() != test.quantString {
394394
t.Errorf("test: %s, expected: %v, got: %v", test.testName, test.quantString, q.String())
395395
}
@@ -907,7 +907,7 @@ func TestFSTypeProvision(t *testing.T) {
907907
Name: "test-testi",
908908
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
909909
Capacity: v1.ResourceList{
910-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
910+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
911911
},
912912
CSIPVS: &v1.CSIPersistentVolumeSource{
913913
Driver: "test-driver",
@@ -935,7 +935,7 @@ func TestFSTypeProvision(t *testing.T) {
935935
Name: "test-testi",
936936
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
937937
Capacity: v1.ResourceList{
938-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
938+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
939939
},
940940
CSIPVS: &v1.CSIPersistentVolumeSource{
941941
Driver: "test-driver",
@@ -966,7 +966,7 @@ func TestFSTypeProvision(t *testing.T) {
966966
Name: "test-testi",
967967
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
968968
Capacity: v1.ResourceList{
969-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
969+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
970970
},
971971
CSIPVS: &v1.CSIPersistentVolumeSource{
972972
Driver: "test-driver",
@@ -996,7 +996,7 @@ func TestFSTypeProvision(t *testing.T) {
996996
Name: "test-testi",
997997
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
998998
Capacity: v1.ResourceList{
999-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
999+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
10001000
},
10011001
CSIPVS: &v1.CSIPersistentVolumeSource{
10021002
Driver: "test-driver",
@@ -1049,7 +1049,7 @@ func TestProvision(t *testing.T) {
10491049
Name: "test-testi",
10501050
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
10511051
Capacity: v1.ResourceList{
1052-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1052+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
10531053
},
10541054
CSIPVS: &v1.CSIPersistentVolumeSource{
10551055
Driver: "test-driver",
@@ -1078,7 +1078,7 @@ func TestProvision(t *testing.T) {
10781078
Name: "test-testi",
10791079
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
10801080
Capacity: v1.ResourceList{
1081-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1081+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
10821082
},
10831083
CSIPVS: &v1.CSIPersistentVolumeSource{
10841084
Driver: "test-driver",
@@ -1133,7 +1133,7 @@ func TestProvision(t *testing.T) {
11331133
Name: "test-testi",
11341134
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
11351135
Capacity: v1.ResourceList{
1136-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1136+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
11371137
},
11381138
CSIPVS: &v1.CSIPersistentVolumeSource{
11391139
Driver: "test-driver",
@@ -1179,7 +1179,7 @@ func TestProvision(t *testing.T) {
11791179
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
11801180
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteMany},
11811181
Capacity: v1.ResourceList{
1182-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1182+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
11831183
},
11841184
CSIPVS: &v1.CSIPersistentVolumeSource{
11851185
Driver: "test-driver",
@@ -1231,7 +1231,7 @@ func TestProvision(t *testing.T) {
12311231
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
12321232
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadOnlyMany},
12331233
Capacity: v1.ResourceList{
1234-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1234+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
12351235
},
12361236
CSIPVS: &v1.CSIPersistentVolumeSource{
12371237
Driver: "test-driver",
@@ -1283,7 +1283,7 @@ func TestProvision(t *testing.T) {
12831283
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
12841284
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
12851285
Capacity: v1.ResourceList{
1286-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1286+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
12871287
},
12881288
CSIPVS: &v1.CSIPersistentVolumeSource{
12891289
Driver: "test-driver",
@@ -1335,7 +1335,7 @@ func TestProvision(t *testing.T) {
13351335
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
13361336
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadOnlyMany, v1.ReadWriteOnce},
13371337
Capacity: v1.ResourceList{
1338-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1338+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
13391339
},
13401340
CSIPVS: &v1.CSIPersistentVolumeSource{
13411341
Driver: "test-driver",
@@ -1378,7 +1378,7 @@ func TestProvision(t *testing.T) {
13781378
expectedPVSpec: &pvSpec{
13791379
Name: "test-testi",
13801380
Capacity: v1.ResourceList{
1381-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1381+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
13821382
},
13831383
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
13841384
CSIPVS: &v1.CSIPersistentVolumeSource{
@@ -1429,7 +1429,7 @@ func TestProvision(t *testing.T) {
14291429
expectedPVSpec: &pvSpec{
14301430
Name: "test-testi",
14311431
Capacity: v1.ResourceList{
1432-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1432+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
14331433
},
14341434
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
14351435
CSIPVS: &v1.CSIPersistentVolumeSource{
@@ -1480,7 +1480,7 @@ func TestProvision(t *testing.T) {
14801480
expectedPVSpec: &pvSpec{
14811481
Name: "test-testi",
14821482
Capacity: v1.ResourceList{
1483-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1483+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
14841484
},
14851485
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
14861486
CSIPVS: &v1.CSIPersistentVolumeSource{
@@ -1522,7 +1522,7 @@ func TestProvision(t *testing.T) {
15221522
expectedPVSpec: &pvSpec{
15231523
Name: "test-testi",
15241524
Capacity: v1.ResourceList{
1525-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1525+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
15261526
},
15271527
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
15281528
VolumeMode: &volumeModeFileSystem,
@@ -1549,7 +1549,7 @@ func TestProvision(t *testing.T) {
15491549
expectedPVSpec: &pvSpec{
15501550
Name: "test-testi",
15511551
Capacity: v1.ResourceList{
1552-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1552+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
15531553
},
15541554
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
15551555
VolumeMode: &volumeModeBlock,
@@ -1673,7 +1673,7 @@ func TestProvision(t *testing.T) {
16731673
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
16741674
MountOptions: []string{"foo=bar", "baz=qux"},
16751675
Capacity: v1.ResourceList{
1676-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1676+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
16771677
},
16781678
CSIPVS: &v1.CSIPersistentVolumeSource{
16791679
Driver: "test-driver",
@@ -1780,7 +1780,7 @@ func TestProvision(t *testing.T) {
17801780
Name: "test-testi",
17811781
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
17821782
Capacity: v1.ResourceList{
1783-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1783+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
17841784
},
17851785
CSIPVS: &v1.CSIPersistentVolumeSource{
17861786
Driver: "test-driver",
@@ -1847,7 +1847,7 @@ func TestProvision(t *testing.T) {
18471847
Name: "test-testi",
18481848
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
18491849
Capacity: v1.ResourceList{
1850-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1850+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
18511851
},
18521852
CSIPVS: &v1.CSIPersistentVolumeSource{
18531853
Driver: "test-driver",
@@ -1926,7 +1926,7 @@ func TestProvision(t *testing.T) {
19261926
Name: "test-testi",
19271927
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
19281928
Capacity: v1.ResourceList{
1929-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
1929+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
19301930
},
19311931
CSIPVS: &v1.CSIPersistentVolumeSource{
19321932
Driver: "test-driver",
@@ -2320,7 +2320,7 @@ func TestProvisionFromSnapshot(t *testing.T) {
23202320
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
23212321
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
23222322
Capacity: v1.ResourceList{
2323-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
2323+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
23242324
},
23252325
CSIPVS: &v1.CSIPersistentVolumeSource{
23262326
Driver: "test-driver",
@@ -3766,7 +3766,7 @@ func TestProvisionFromPVC(t *testing.T) {
37663766
ReclaimPolicy: v1.PersistentVolumeReclaimDelete,
37673767
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
37683768
Capacity: v1.ResourceList{
3769-
v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes),
3769+
v1.ResourceName(v1.ResourceStorage): bytesToQuantity(requestedBytes),
37703770
},
37713771
CSIPVS: &v1.CSIPersistentVolumeSource{
37723772
Driver: "test-driver",

0 commit comments

Comments
 (0)