11package cloud
22
33import (
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
6162type NasClientV2 struct {
6263 region string
63- limiter ratelimit .Limiter
64+ limiter * rate .Limiter
6465 client interfaces.NasV2Interface
6566}
6667
6768func (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
7982func (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
9499func (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
117124func (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
123132func (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
135146func (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
151164func (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
159174func (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 })
0 commit comments