Skip to content

Commit 51c48ff

Browse files
committed
nas: use golang/x rate limiter
1 parent 0a6bdf5 commit 51c48ff

File tree

19 files changed

+38
-527
lines changed

19 files changed

+38
-527
lines changed

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ require (
2727
github.com/sirupsen/logrus v1.9.3
2828
github.com/spf13/pflag v1.0.5
2929
github.com/stretchr/testify v1.10.0
30-
go.uber.org/ratelimit v0.1.0
3130
golang.org/x/sys v0.37.0
3231
golang.org/x/time v0.7.0
3332
google.golang.org/grpc v1.75.0

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,8 +375,6 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
375375
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
376376
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
377377
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
378-
go.uber.org/ratelimit v0.1.0 h1:U2AruXqeTb4Eh9sYQSTrMhH8Cb7M0Ian2ibBOnBcnAw=
379-
go.uber.org/ratelimit v0.1.0/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y=
380378
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
381379
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
382380
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=

pkg/nas/cloud/nas_client_factory.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,15 @@ import (
55
"strconv"
66

77
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/nas/interfaces"
8+
"golang.org/x/time/rate"
89
"k8s.io/klog/v2"
9-
10-
"go.uber.org/ratelimit"
1110
)
1211

1312
const defaultQps = 2
1413

1514
type NasClientFactory struct {
1615
// ratelimiter only takes effect on v2 client
17-
limiter ratelimit.Limiter
16+
limiter *rate.Limiter
1817
}
1918

2019
func NewNasClientFactory() *NasClientFactory {
@@ -30,7 +29,7 @@ func NewNasClientFactory() *NasClientFactory {
3029
}
3130
}
3231
return &NasClientFactory{
33-
limiter: ratelimit.New(qps),
32+
limiter: rate.NewLimiter(rate.Limit(qps), 10),
3433
}
3534
}
3635

pkg/nas/cloud/nas_client_factory_test.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
package cloud
22

33
import (
4-
"github.com/stretchr/testify/assert"
5-
"go.uber.org/ratelimit"
64
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
"golang.org/x/time/rate"
78
)
89

910
func TestNasClientFactory(t *testing.T) {
1011
t.Parallel()
1112
actual := NewNasClientFactory()
12-
expected := &NasClientFactory{ratelimit.New(defaultQps)}
13+
expected := &NasClientFactory{rate.NewLimiter(defaultQps, 10)}
1314
assert.Equal(t, expected, actual)
1415
}
1516

1617
func TestNasClientFactoryValidEnv(t *testing.T) {
1718
t.Setenv("NAS_LIMIT_PERSECOND", "3")
18-
expected := &NasClientFactory{ratelimit.New(3)}
19+
expected := &NasClientFactory{rate.NewLimiter(3, 10)}
1920
actual := NewNasClientFactory()
2021
assert.Equal(t, expected, actual)
2122
}
2223

2324
func TestNasClientFactoryInvalidEnv(t *testing.T) {
2425
t.Setenv("NAS_LIMIT_PERSECOND", "3i")
25-
expected := &NasClientFactory{ratelimit.New(defaultQps)}
26+
expected := &NasClientFactory{rate.NewLimiter(defaultQps, 10)}
2627
actual := NewNasClientFactory()
2728
assert.Equal(t, expected, actual)
2829
}

pkg/nas/cloud/nas_client_v2.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cloud
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
67
"os"
@@ -12,7 +13,7 @@ import (
1213
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/credentials"
1314
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/nas/interfaces"
1415
utilshttp "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/utils/http"
15-
"go.uber.org/ratelimit"
16+
"golang.org/x/time/rate"
1617
"k8s.io/klog/v2"
1718
)
1819

@@ -60,12 +61,14 @@ func NewNasClientV2(region string) (*sdk.Client, error) {
6061

6162
type NasClientV2 struct {
6263
region string
63-
limiter ratelimit.Limiter
64+
limiter *rate.Limiter
6465
client interfaces.NasV2Interface
6566
}
6667

6768
func (c *NasClientV2) CreateDir(req *sdk.CreateDirRequest) error {
68-
c.limiter.Take()
69+
if err := c.limiter.Wait(context.TODO()); err != nil {
70+
return fmt.Errorf("error while waiting for rate limiter: %w", err)
71+
}
6972
resp, err := c.client.CreateDir(req)
7073
logger := klog.Background().WithValues("request", req, "response", resp)
7174
if err == nil {
@@ -77,7 +80,9 @@ func (c *NasClientV2) CreateDir(req *sdk.CreateDirRequest) error {
7780
}
7881

7982
func (c *NasClientV2) SetDirQuota(req *sdk.SetDirQuotaRequest) error {
80-
c.limiter.Take()
83+
if err := c.limiter.Wait(context.TODO()); err != nil {
84+
return fmt.Errorf("error while waiting for rate limiter: %w", err)
85+
}
8186
resp, err := c.client.SetDirQuota(req)
8287
if err == nil && resp.Body != nil && !tea.BoolValue(resp.Body.Success) {
8388
err = errors.New("response indicates a failure")
@@ -92,7 +97,9 @@ func (c *NasClientV2) SetDirQuota(req *sdk.SetDirQuotaRequest) error {
9297
}
9398

9499
func (c *NasClientV2) CancelDirQuota(req *sdk.CancelDirQuotaRequest) error {
95-
c.limiter.Take()
100+
if err := c.limiter.Wait(context.TODO()); err != nil {
101+
return fmt.Errorf("error while waiting for rate limiter: %w", err)
102+
}
96103
resp, err := c.client.CancelDirQuota(req)
97104
if err == nil {
98105
if !tea.BoolValue(resp.Body.Success) {
@@ -115,13 +122,17 @@ func (c *NasClientV2) CancelDirQuota(req *sdk.CancelDirQuotaRequest) error {
115122
}
116123

117124
func (c *NasClientV2) GetRecycleBinAttribute(filesystemId string) (*sdk.GetRecycleBinAttributeResponse, error) {
118-
c.limiter.Take()
125+
if err := c.limiter.Wait(context.TODO()); err != nil {
126+
return nil, fmt.Errorf("error while waiting for rate limiter: %w", err)
127+
}
119128
req := &sdk.GetRecycleBinAttributeRequest{FileSystemId: &filesystemId}
120129
return c.client.GetRecycleBinAttribute(req)
121130
}
122131

123132
func (c *NasClientV2) CreateAccesspoint(req *sdk.CreateAccessPointRequest) (*sdk.CreateAccessPointResponse, error) {
124-
c.limiter.Take()
133+
if err := c.limiter.Wait(context.TODO()); err != nil {
134+
return nil, fmt.Errorf("error while waiting for rate limiter: %w", err)
135+
}
125136
resp, err := c.client.CreateAccessPoint(req)
126137
logger := klog.Background().WithValues("request", req, "response", resp)
127138
if err == nil {
@@ -133,7 +144,9 @@ func (c *NasClientV2) CreateAccesspoint(req *sdk.CreateAccessPointRequest) (*sdk
133144
}
134145

135146
func (c *NasClientV2) DeleteAccesspoint(filesystemId, accessPointId string) error {
136-
c.limiter.Take()
147+
if err := c.limiter.Wait(context.TODO()); err != nil {
148+
return fmt.Errorf("error while waiting for rate limiter: %w", err)
149+
}
137150
req := &sdk.DeleteAccessPointRequest{
138151
AccessPointId: &accessPointId,
139152
FileSystemId: &filesystemId,
@@ -149,15 +162,19 @@ func (c *NasClientV2) DeleteAccesspoint(filesystemId, accessPointId string) erro
149162
}
150163

151164
func (c *NasClientV2) DescribeAccesspoint(filesystemId, accessPointId string) (*sdk.DescribeAccessPointResponse, error) {
152-
c.limiter.Take()
165+
if err := c.limiter.Wait(context.TODO()); err != nil {
166+
return nil, fmt.Errorf("error while waiting for rate limiter: %w", err)
167+
}
153168
return c.client.DescribeAccessPoint(&sdk.DescribeAccessPointRequest{
154169
AccessPointId: &accessPointId,
155170
FileSystemId: &filesystemId,
156171
})
157172
}
158173

159174
func (c *NasClientV2) DescribeFileSystems(filesystemID string) (*sdk.DescribeFileSystemsResponse, error) {
160-
c.limiter.Take()
175+
if err := c.limiter.Wait(context.TODO()); err != nil {
176+
return nil, fmt.Errorf("error while waiting for rate limiter: %w", err)
177+
}
161178
return c.client.DescribeFileSystems(&sdk.DescribeFileSystemsRequest{
162179
FileSystemId: &filesystemID,
163180
})

pkg/nas/cloud/nas_client_v2_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"github.com/golang/mock/gomock"
99
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/nas/interfaces"
1010
"github.com/stretchr/testify/assert"
11-
"go.uber.org/ratelimit"
11+
"golang.org/x/time/rate"
1212
)
1313

1414
const nasV2Region = "cn-hangzhou"
@@ -39,7 +39,7 @@ func newNasClientV2ForTest(t *testing.T, mockExpects func(*interfaces.MockNasV2I
3939
mockExpects(mockNas)
4040
return &NasClientV2{
4141
region: nasV2Region,
42-
limiter: ratelimit.New(2),
42+
limiter: rate.NewLimiter(2, 10),
4343
client: mockNas,
4444
}
4545
}

vendor/go.uber.org/ratelimit/.gitignore

Lines changed: 0 additions & 2 deletions
This file was deleted.

vendor/go.uber.org/ratelimit/CHANGELOG.md

Lines changed: 0 additions & 11 deletions
This file was deleted.

vendor/go.uber.org/ratelimit/LICENSE

Lines changed: 0 additions & 21 deletions
This file was deleted.

vendor/go.uber.org/ratelimit/Makefile

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)