Skip to content

Commit 79f57d9

Browse files
authored
Merge pull request #1545 from dankova22/release-2.1.3-cherry-pick
Release 2.1.3 cherry pick
2 parents c71258d + 92e6f96 commit 79f57d9

File tree

10 files changed

+177
-48
lines changed

10 files changed

+177
-48
lines changed

charts/aws-efs-csi-driver/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ maintainers:
1515
- name: leakingtapan
1616
url: https://github.com/leakingtapan
1717
- name: krmichel
18-
url: https://github.com/krmichel
18+
url: https://github.com/krmichel

charts/aws-efs-csi-driver/values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ controller:
111111
enabled: false
112112
# maxUnavailable: 1
113113
minAvailable: 1
114-
unhealthyPodEvictionPolicy: "Delete"
114+
unhealthyPodEvictionPolicy: IfHealthyBudget
115115
# securityContext on the controller pod
116116
securityContext:
117117
runAsNonRoot: false

cmd/main.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ func main() {
4141
volMetricsFsRateLimit = flag.Int("vol-metrics-fs-rate-limit", 5, "Volume metrics routines rate limiter per file system")
4242
deleteAccessPointRootDir = flag.Bool("delete-access-point-root-dir", false,
4343
"Opt in to delete access point root directory by DeleteVolume. By default, DeleteVolume will delete the access point behind Persistent Volume and deleting access point will not delete the access point root directory or its contents.")
44-
tags = flag.String("tags", "", "Space separated key:value pairs which will be added as tags for EFS resources. For example, 'environment:prod region:us-east-1'")
44+
adaptiveRetryMode = flag.Bool("adaptive-retry-mode", true, "Opt out to use standard sdk retry configuration. By default, adaptive retry mode will be used to more heavily client side rate limit EFS API requests.")
45+
tags = flag.String("tags", "", "Space separated key:value pairs which will be added as tags for EFS resources. For example, 'environment:prod region:us-east-1'")
4546
)
4647
klog.InitFlags(nil)
4748
flag.Parse()
@@ -60,7 +61,7 @@ func main() {
6061
if err != nil {
6162
klog.Fatalln(err)
6263
}
63-
drv := driver.NewDriver(*endpoint, etcAmazonEfs, *efsUtilsStaticFilesPath, *tags, *volMetricsOptIn, *volMetricsRefreshPeriod, *volMetricsFsRateLimit, *deleteAccessPointRootDir)
64+
drv := driver.NewDriver(*endpoint, etcAmazonEfs, *efsUtilsStaticFilesPath, *tags, *volMetricsOptIn, *volMetricsRefreshPeriod, *volMetricsFsRateLimit, *deleteAccessPointRootDir, *adaptiveRetryMode)
6465
if err := drv.Run(); err != nil {
6566
klog.Fatalln(err)
6667
}

docs/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,7 @@ Enabling the vol-metrics-opt-in parameter activates the gathering of inode and d
355355
| Parameters | Values | Default | Optional | Description |
356356
|-----------------------------|--------|---------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
357357
| delete-access-point-root-dir| | false | true | Opt in to delete access point root directory by DeleteVolume. By default, DeleteVolume will delete the access point behind Persistent Volume and deleting access point will not delete the access point root directory or its contents. |
358+
| adaptive-retry-mode | | true | true | Opt out to use standard sdk retry mode for EFS API calls. By default, Driver will use adaptive mode for the sdk retry configuration which heavily rate limits EFS API requests to reduce throttling if throttling is observed. |
358359
| tags | | | true | Space separated key:value pairs which will be added as tags for Amazon EFS resources. For example, '--tags=name:efs-tag-test date:Jan24' |
359360
### Upgrading the Amazon EFS CSI Driver
360361

pkg/cloud/cloud.go

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -112,21 +112,22 @@ type Cloud interface {
112112
type cloud struct {
113113
metadata MetadataService
114114
efs Efs
115+
rm *retryManager
115116
}
116117

117118
// NewCloud returns a new instance of AWS cloud
118119
// It panics if session is invalid
119-
func NewCloud() (Cloud, error) {
120-
return createCloud("")
120+
func NewCloud(adaptiveRetryMode bool) (Cloud, error) {
121+
return createCloud("", adaptiveRetryMode)
121122
}
122123

123124
// NewCloudWithRole returns a new instance of AWS cloud after assuming an aws role
124125
// It panics if driver does not have permissions to assume role.
125-
func NewCloudWithRole(awsRoleArn string) (Cloud, error) {
126-
return createCloud(awsRoleArn)
126+
func NewCloudWithRole(awsRoleArn string, adaptiveRetryMode bool) (Cloud, error) {
127+
return createCloud(awsRoleArn, adaptiveRetryMode)
127128
}
128129

129-
func createCloud(awsRoleArn string) (Cloud, error) {
130+
func createCloud(awsRoleArn string, adaptiveRetryMode bool) (Cloud, error) {
130131
cfg, err := config.LoadDefaultConfig(context.TODO())
131132
if err != nil {
132133
klog.Warningf("Could not load config: %v", err)
@@ -149,12 +150,15 @@ func createCloud(awsRoleArn string) (Cloud, error) {
149150
return nil, fmt.Errorf("could not get metadata: %v", err)
150151
}
151152

153+
rm := newRetryManager(adaptiveRetryMode)
154+
152155
efs_client := createEfsClient(awsRoleArn, metadata)
153156
klog.V(5).Infof("EFS Client created using the following endpoint: %+v", cfg.BaseEndpoint)
154157

155158
return &cloud{
156159
metadata: metadata,
157160
efs: efs_client,
161+
rm: rm,
158162
}, nil
159163
}
160164

@@ -193,7 +197,9 @@ func (c *cloud) CreateAccessPoint(ctx context.Context, clientToken string, acces
193197
}
194198

195199
klog.V(5).Infof("Calling Create AP with input: %+v", *createAPInput)
196-
res, err := c.efs.CreateAccessPoint(ctx, createAPInput)
200+
res, err := c.efs.CreateAccessPoint(ctx, createAPInput, func(o *efs.Options) {
201+
o.Retryer = c.rm.createAccessPointRetryer
202+
})
197203
if err != nil {
198204
if isAccessDenied(err) {
199205
return nil, ErrAccessDenied
@@ -211,7 +217,9 @@ func (c *cloud) CreateAccessPoint(ctx context.Context, clientToken string, acces
211217

212218
func (c *cloud) DeleteAccessPoint(ctx context.Context, accessPointId string) (err error) {
213219
deleteAccessPointInput := &efs.DeleteAccessPointInput{AccessPointId: &accessPointId}
214-
_, err = c.efs.DeleteAccessPoint(ctx, deleteAccessPointInput)
220+
_, err = c.efs.DeleteAccessPoint(ctx, deleteAccessPointInput, func(o *efs.Options) {
221+
o.Retryer = c.rm.deleteAccessPointRetryer
222+
})
215223
if err != nil {
216224
if isAccessDenied(err) {
217225
return ErrAccessDenied
@@ -229,7 +237,9 @@ func (c *cloud) DescribeAccessPoint(ctx context.Context, accessPointId string) (
229237
describeAPInput := &efs.DescribeAccessPointsInput{
230238
AccessPointId: &accessPointId,
231239
}
232-
res, err := c.efs.DescribeAccessPoints(ctx, describeAPInput)
240+
res, err := c.efs.DescribeAccessPoints(ctx, describeAPInput, func(o *efs.Options) {
241+
o.Retryer = c.rm.describeAccessPointsRetryer
242+
})
233243
if err != nil {
234244
if isAccessDenied(err) {
235245
return nil, ErrAccessDenied
@@ -259,7 +269,9 @@ func (c *cloud) FindAccessPointByClientToken(ctx context.Context, clientToken, f
259269
FileSystemId: &fileSystemId,
260270
MaxResults: aws.Int32(AccessPointPerFsLimit),
261271
}
262-
res, err := c.efs.DescribeAccessPoints(ctx, describeAPInput)
272+
res, err := c.efs.DescribeAccessPoints(ctx, describeAPInput, func(o *efs.Options) {
273+
o.Retryer = c.rm.describeAccessPointsRetryer
274+
})
263275
if err != nil {
264276
if isAccessDenied(err) {
265277
return nil, ErrAccessDenied
@@ -289,7 +301,9 @@ func (c *cloud) ListAccessPoints(ctx context.Context, fileSystemId string) (acce
289301
FileSystemId: &fileSystemId,
290302
MaxResults: aws.Int32(AccessPointPerFsLimit),
291303
}
292-
res, err := c.efs.DescribeAccessPoints(ctx, describeAPInput)
304+
res, err := c.efs.DescribeAccessPoints(ctx, describeAPInput, func(o *efs.Options) {
305+
o.Retryer = c.rm.describeAccessPointsRetryer
306+
})
293307
if err != nil {
294308
if isAccessDenied(err) {
295309
return nil, ErrAccessDenied
@@ -325,7 +339,9 @@ func (c *cloud) ListAccessPoints(ctx context.Context, fileSystemId string) (acce
325339
func (c *cloud) DescribeFileSystem(ctx context.Context, fileSystemId string) (fs *FileSystem, err error) {
326340
describeFsInput := &efs.DescribeFileSystemsInput{FileSystemId: &fileSystemId}
327341
klog.V(5).Infof("Calling DescribeFileSystems with input: %+v", *describeFsInput)
328-
res, err := c.efs.DescribeFileSystems(ctx, describeFsInput)
342+
res, err := c.efs.DescribeFileSystems(ctx, describeFsInput, func(o *efs.Options) {
343+
o.Retryer = c.rm.describeFileSystemsRetryer
344+
})
329345
if err != nil {
330346
if isAccessDenied(err) {
331347
return nil, ErrAccessDenied
@@ -348,7 +364,9 @@ func (c *cloud) DescribeFileSystem(ctx context.Context, fileSystemId string) (fs
348364
func (c *cloud) DescribeMountTargets(ctx context.Context, fileSystemId, azName string) (fs *MountTarget, err error) {
349365
describeMtInput := &efs.DescribeMountTargetsInput{FileSystemId: &fileSystemId}
350366
klog.V(5).Infof("Calling DescribeMountTargets with input: %+v", *describeMtInput)
351-
res, err := c.efs.DescribeMountTargets(ctx, describeMtInput)
367+
res, err := c.efs.DescribeMountTargets(ctx, describeMtInput, func(o *efs.Options) {
368+
o.Retryer = c.rm.describeMountTargetsRetryer
369+
})
352370
if err != nil {
353371
if isAccessDenied(err) {
354372
return nil, ErrAccessDenied

0 commit comments

Comments
 (0)