Skip to content

Commit f99d400

Browse files
committed
comments improvements
1 parent 596ccea commit f99d400

File tree

3 files changed

+43
-33
lines changed

3 files changed

+43
-33
lines changed

pkg/csi/cinder/controllerserver.go

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,26 @@ import (
3232
"google.golang.org/grpc/codes"
3333
"google.golang.org/grpc/status"
3434
"google.golang.org/protobuf/types/known/timestamppb"
35-
36-
"k8s.io/klog/v2"
37-
3835
sharedcsi "k8s.io/cloud-provider-openstack/pkg/csi"
3936
"k8s.io/cloud-provider-openstack/pkg/csi/cinder/openstack"
4037
"k8s.io/cloud-provider-openstack/pkg/util"
4138
cpoerrors "k8s.io/cloud-provider-openstack/pkg/util/errors"
39+
"k8s.io/klog/v2"
4240
)
4341

4442
type controllerServer struct {
4543
Driver *Driver
4644
Clouds map[string]openstack.IOpenStack
4745
}
4846

47+
type cloudsStartingToken struct {
48+
// CloudName is the cloud that we have to list next.
49+
CloudName string `json:"cloud"`
50+
// Token is the pagination token returned by the last Cinder list volume operation. If empty, we will list all volumes
51+
// from the beginning.
52+
Token string `json:"token"`
53+
}
54+
4955
const (
5056
cinderCSIClusterIDKey = "cinder.csi.openstack.org/cluster"
5157
affinityKey = "cinder.csi.openstack.org/affinity"
@@ -403,11 +409,6 @@ func (cs *controllerServer) ControllerUnpublishVolume(ctx context.Context, req *
403409
return &csi.ControllerUnpublishVolumeResponse{}, nil
404410
}
405411

406-
type CloudsStartingToken struct {
407-
CloudName string `json:"cloud"`
408-
Token string `json:"token"`
409-
}
410-
411412
func (cs *controllerServer) extractNodeIDs(attachments []volumes.Attachment) []string {
412413
nodeIDs := make([]string, len(attachments))
413414
for i, attachment := range attachments {
@@ -441,10 +442,7 @@ func (cs *controllerServer) ListVolumes(ctx context.Context, req *csi.ListVolume
441442
maxEntries := int(req.MaxEntries)
442443

443444
var err error
444-
var cloudsToken = CloudsStartingToken{
445-
CloudName: "",
446-
Token: "",
447-
}
445+
var cloudsToken = cloudsStartingToken{}
448446

449447
cloudsNames := maps.Keys(cs.Clouds)
450448
sort.Strings(cloudsNames)
@@ -466,7 +464,9 @@ func (cs *controllerServer) ListVolumes(ctx context.Context, req *csi.ListVolume
466464
}
467465
idx++
468466
}
469-
volumeList, nextPageToken, err := cs.Clouds[cloudsNames[idx]].ListVolumes(ctx, maxEntries, startingToken)
467+
468+
var volumeList []volumes.Volume
469+
volumeList, cloudsToken.Token, err = cs.Clouds[cloudsNames[idx]].ListVolumes(ctx, maxEntries, startingToken)
470470
if err != nil {
471471
klog.Errorf("Failed to ListVolumes: %v", err)
472472
if cpoerrors.IsInvalidError(err) {
@@ -475,12 +475,11 @@ func (cs *controllerServer) ListVolumes(ctx context.Context, req *csi.ListVolume
475475
return nil, status.Errorf(codes.Internal, "ListVolumes failed with error %v", err)
476476
}
477477
volumeEntries := cs.createVolumeEntries(volumeList)
478-
klog.V(4).Infof("ListVolumes: retrieved %d entries and %q next token from cloud %q", len(volumeEntries), nextPageToken, cloudsNames[idx])
478+
klog.V(4).Infof("ListVolumes: retrieved %d entries and %q next token from cloud %q", len(volumeEntries), cloudsToken.Token, cloudsNames[idx])
479479

480-
cloudsToken.Token = nextPageToken
481480
switch {
482481
// if we have not finished listing all volumes from this cloud, we will continue on next call.
483-
case nextPageToken != "":
482+
case cloudsToken.Token != "":
484483
// if we listed all volumes from this cloud but more clouds exist, return a token of the next cloud.
485484
case idx+1 < len(cloudsNames):
486485
cloudsToken.CloudName = cloudsNames[idx+1]

pkg/csi/cinder/controllerserver_test.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ func genFakeVolumeEntry(fakeVol volumes.Volume) *csi.ListVolumesResponse_Entry {
438438
}
439439
}
440440
func genFakeVolumeEntries(fakeVolumes []volumes.Volume) []*csi.ListVolumesResponse_Entry {
441-
entries := make([]*csi.ListVolumesResponse_Entry, 0)
441+
entries := make([]*csi.ListVolumesResponse_Entry, 0, len(fakeVolumes))
442442
for _, fakeVol := range fakeVolumes {
443443
entries = append(entries, genFakeVolumeEntry(fakeVol))
444444
}
@@ -450,7 +450,7 @@ func TestListVolumes(t *testing.T) {
450450

451451
// Init assert
452452
assert := assert.New(t)
453-
token := CloudsStartingToken{
453+
token := cloudsStartingToken{
454454
CloudName: "",
455455
Token: FakeVolID,
456456
}
@@ -476,7 +476,7 @@ func TestListVolumes(t *testing.T) {
476476
type ListVolumesTest struct {
477477
name string
478478
maxEntries int
479-
startingToken *CloudsStartingToken
479+
startingToken *cloudsStartingToken
480480
volumeSet map[string]ListVolumeTestOSMock
481481
result ListVolumesTestResult
482482
}
@@ -489,11 +489,11 @@ type ListVolumeTestOSMock struct {
489489
}
490490

491491
type ListVolumesTestRequest struct {
492-
StartingToken CloudsStartingToken
492+
StartingToken cloudsStartingToken
493493
}
494494

495495
type ListVolumesTestResult struct {
496-
ExpectedToken *CloudsStartingToken
496+
ExpectedToken *cloudsStartingToken
497497
Entries []*csi.ListVolumesResponse_Entry
498498
}
499499

@@ -531,7 +531,7 @@ func TestGlobalListVolumesMultipleClouds(t *testing.T) {
531531
},
532532

533533
result: ListVolumesTestResult{
534-
ExpectedToken: &CloudsStartingToken{
534+
ExpectedToken: &cloudsStartingToken{
535535
Token: "vol2",
536536
},
537537
Entries: genFakeVolumeEntries([]volumes.Volume{
@@ -586,15 +586,15 @@ func TestGlobalListVolumesMultipleClouds(t *testing.T) {
586586
},
587587
},
588588
result: ListVolumesTestResult{
589-
ExpectedToken: &CloudsStartingToken{
589+
ExpectedToken: &cloudsStartingToken{
590590
CloudName: "region-x",
591591
},
592592
Entries: genFakeVolumeEntries([]volumes.Volume{}),
593593
},
594594
},
595595
{
596596
name: "cloud2_no_pagination_no_volumes",
597-
startingToken: &CloudsStartingToken{
597+
startingToken: &cloudsStartingToken{
598598
CloudName: "region-x",
599599
},
600600
maxEntries: 0,
@@ -645,7 +645,7 @@ func TestGlobalListVolumesMultipleClouds(t *testing.T) {
645645
},
646646
},
647647
result: ListVolumesTestResult{
648-
ExpectedToken: &CloudsStartingToken{
648+
ExpectedToken: &cloudsStartingToken{
649649
CloudName: "region-x",
650650
},
651651
Entries: genFakeVolumeEntries([]volumes.Volume{
@@ -659,7 +659,7 @@ func TestGlobalListVolumesMultipleClouds(t *testing.T) {
659659
{
660660
name: "cloud2_no_pagination_has_volumes",
661661
maxEntries: 0,
662-
startingToken: &CloudsStartingToken{
662+
startingToken: &cloudsStartingToken{
663663
CloudName: "region-x",
664664
},
665665
volumeSet: map[string]ListVolumeTestOSMock{
@@ -713,7 +713,7 @@ func TestGlobalListVolumesMultipleClouds(t *testing.T) {
713713
},
714714
},
715715
result: ListVolumesTestResult{
716-
ExpectedToken: &CloudsStartingToken{
716+
ExpectedToken: &cloudsStartingToken{
717717
CloudName: "region-x",
718718
},
719719
Entries: genFakeVolumeEntries([]volumes.Volume{}),
@@ -739,7 +739,7 @@ func TestGlobalListVolumesMultipleClouds(t *testing.T) {
739739
},
740740
},
741741
result: ListVolumesTestResult{
742-
ExpectedToken: &CloudsStartingToken{
742+
ExpectedToken: &cloudsStartingToken{
743743
CloudName: "region-x",
744744
},
745745
Entries: genFakeVolumeEntries([]volumes.Volume{
@@ -767,7 +767,7 @@ func TestGlobalListVolumesMultipleClouds(t *testing.T) {
767767
},
768768
},
769769
result: ListVolumesTestResult{
770-
ExpectedToken: &CloudsStartingToken{
770+
ExpectedToken: &cloudsStartingToken{
771771
CloudName: "region-x",
772772
},
773773
Entries: genFakeVolumeEntries([]volumes.Volume{}),
@@ -794,7 +794,7 @@ func TestGlobalListVolumesMultipleClouds(t *testing.T) {
794794
},
795795
},
796796
result: ListVolumesTestResult{
797-
ExpectedToken: &CloudsStartingToken{
797+
ExpectedToken: &cloudsStartingToken{
798798
CloudName: "region-x",
799799
},
800800
Entries: genFakeVolumeEntries([]volumes.Volume{
@@ -826,7 +826,7 @@ func TestGlobalListVolumesMultipleClouds(t *testing.T) {
826826
},
827827
},
828828
result: ListVolumesTestResult{
829-
ExpectedToken: &CloudsStartingToken{
829+
ExpectedToken: &cloudsStartingToken{
830830
CloudName: "",
831831
Token: "vol2",
832832
},
@@ -839,7 +839,7 @@ func TestGlobalListVolumesMultipleClouds(t *testing.T) {
839839
{
840840
name: "cloud1_3volume_cloud2_1volume_2st_call",
841841
maxEntries: 2,
842-
startingToken: &CloudsStartingToken{
842+
startingToken: &cloudsStartingToken{
843843
CloudName: "region-x",
844844
Token: "",
845845
},

pkg/csi/cinder/openstack/openstack_volumes.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"google.golang.org/grpc/codes"
3131
"google.golang.org/grpc/status"
3232
"k8s.io/apimachinery/pkg/util/wait"
33+
3334
"k8s.io/cloud-provider-openstack/pkg/metrics"
3435
"k8s.io/cloud-provider-openstack/pkg/util"
3536
cpoerrors "k8s.io/cloud-provider-openstack/pkg/util/errors"
@@ -82,8 +83,18 @@ func (os *OpenStack) ListVolumes(ctx context.Context, limit int, startingToken s
8283
var nextPageToken string
8384
var vols []volumes.Volume
8485

85-
opts := volumes.ListOpts{Limit: limit, Marker: startingToken}
8686
mc := metrics.NewMetricContext("volume", "list")
87+
opts := volumes.ListOpts{Limit: limit, Marker: startingToken}
88+
if limit == 0 {
89+
page, err := volumes.List(os.blockstorage, opts).AllPages(ctx)
90+
if err != nil {
91+
return nil, "", err
92+
}
93+
vols, err = volumes.ExtractVolumes(page)
94+
if mc.ObserveRequest(err) != nil {
95+
return vols, "", err
96+
}
97+
}
8798
err := volumes.List(os.blockstorage, opts).EachPage(ctx, func(_ context.Context, page pagination.Page) (bool, error) {
8899
var err error
89100

0 commit comments

Comments
 (0)