Skip to content

Commit cc9b2e9

Browse files
committed
Use client cache for put
1 parent c8907e5 commit cc9b2e9

File tree

5 files changed

+119
-75
lines changed

5 files changed

+119
-75
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ plan.tfplan
88
# IntelliJ IDEA project files
99
.idea
1010
*.iprg
11+
12+
.DS_Store

go.mod

+20-21
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ module github.com/hashicorp/boundary-plugin-aws
33
go 1.21
44

55
require (
6-
github.com/aws/aws-sdk-go-v2 v1.32.4
7-
github.com/aws/aws-sdk-go-v2/service/ec2 v1.188.0
8-
github.com/aws/aws-sdk-go-v2/service/iam v1.38.0
9-
github.com/aws/aws-sdk-go-v2/service/s3 v1.67.0
10-
github.com/aws/aws-sdk-go-v2/service/sts v1.33.0
11-
github.com/aws/smithy-go v1.22.0
6+
github.com/aws/aws-sdk-go-v2 v1.32.5
7+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.193.0
8+
github.com/aws/aws-sdk-go-v2/service/iam v1.38.1
9+
github.com/aws/aws-sdk-go-v2/service/s3 v1.68.0
10+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.1
11+
github.com/aws/smithy-go v1.22.1
1212
github.com/google/go-cmp v0.6.0
1313
github.com/google/uuid v1.4.0
1414
github.com/hashicorp/boundary/sdk v0.0.43-0.20240717182311-a20aae98794a
@@ -22,20 +22,20 @@ require (
2222
)
2323

2424
require (
25-
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 // indirect
26-
github.com/aws/aws-sdk-go-v2/config v1.18.33 // indirect
27-
github.com/aws/aws-sdk-go-v2/credentials v1.13.32 // indirect
28-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.8 // indirect
29-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23 // indirect
30-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23 // indirect
31-
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.39 // indirect
32-
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.23 // indirect
33-
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 // indirect
34-
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.4 // indirect
35-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4 // indirect
36-
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4 // indirect
37-
github.com/aws/aws-sdk-go-v2/service/sso v1.13.2 // indirect
38-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.2 // indirect
25+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect
26+
github.com/aws/aws-sdk-go-v2/config v1.28.5 // indirect
27+
github.com/aws/aws-sdk-go-v2/credentials v1.17.46 // indirect
28+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20 // indirect
29+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24 // indirect
30+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 // indirect
31+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
32+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.24 // indirect
33+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect
34+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.5 // indirect
35+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 // indirect
36+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.5 // indirect
37+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 // indirect
38+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 // indirect
3939
github.com/davecgh/go-spew v1.1.1 // indirect
4040
github.com/fatih/color v1.15.0 // indirect
4141
github.com/golang/protobuf v1.5.3 // indirect
@@ -47,7 +47,6 @@ require (
4747
github.com/hashicorp/go-kms-wrapping/v2 v2.0.14 // indirect
4848
github.com/hashicorp/go-uuid v1.0.3 // indirect
4949
github.com/hashicorp/go-version v1.5.0 // indirect
50-
github.com/jmespath/go-jmespath v0.4.0 // indirect
5150
github.com/mattn/go-colorable v0.1.13 // indirect
5251
github.com/mattn/go-isatty v0.0.19 // indirect
5352
github.com/mitchellh/copystructure v1.2.0 // indirect

go.sum

+40-52
Original file line numberDiff line numberDiff line change
@@ -8,52 +8,46 @@ github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/
88
github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo=
99
github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
1010
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
11-
github.com/aws/aws-sdk-go-v2 v1.20.1/go.mod h1:NU06lETsFm8fUC6ZjhgDpVBcGZTFQ6XM+LZWZxMI4ac=
12-
github.com/aws/aws-sdk-go-v2 v1.32.4 h1:S13INUiTxgrPueTmrm5DZ+MiAo99zYzHEFh1UNkOxNE=
13-
github.com/aws/aws-sdk-go-v2 v1.32.4/go.mod h1:2SK5n0a2karNTv5tbP1SjsX0uhttou00v/HpXKM1ZUo=
14-
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 h1:pT3hpW0cOHRJx8Y0DfJUEQuqPild8jRGmSFmBgvydr0=
15-
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6/go.mod h1:j/I2++U0xX+cr44QjHay4Cvxj6FUbnxrgmqN3H1jTZA=
16-
github.com/aws/aws-sdk-go-v2/config v1.18.33 h1:JKcw5SFxFW/rpM4mOPjv0VQ11E2kxW13F3exWOy7VZU=
17-
github.com/aws/aws-sdk-go-v2/config v1.18.33/go.mod h1:hXO/l9pgY3K5oZJldamP0pbZHdPqqk+4/maa7DSD3cA=
18-
github.com/aws/aws-sdk-go-v2/credentials v1.13.32 h1:lIH1eKPcCY1ylR4B6PkBGRWMHO3aVenOKJHWiS4/G2w=
19-
github.com/aws/aws-sdk-go-v2/credentials v1.13.32/go.mod h1:lL8U3v/Y79YRG69WlAho0OHIKUXCyFvSXaIvfo81sls=
20-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.8 h1:DK/9C+UN/X+1+Wm8pqaDksQr2tSLzq+8X1/rI/ZxKEQ=
21-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.8/go.mod h1:ce7BgLQfYr5hQFdy67oX2svto3ufGtm6oBvmsHScI1Q=
22-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.38/go.mod h1:qggunOChCMu9ZF/UkAfhTz25+U2rLVb3ya0Ua6TTfCA=
23-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23 h1:A2w6m6Tmr+BNXjDsr7M90zkWjsu4JXHwrzPg235STs4=
24-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.23/go.mod h1:35EVp9wyeANdujZruvHiQUAo9E3vbhnIO1mTCAxMlY0=
25-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.32/go.mod h1:0ZXSqrty4FtQ7p8TEuRde/SZm9X05KT18LAUlR40Ln0=
26-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23 h1:pgYW9FCabt2M25MoHYCfMrVY2ghiiBKYWUVXfwZs+sU=
27-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.23/go.mod h1:c48kLgzO19wAu3CPkDWC28JbaJ+hfQlsdl7I2+oqIbk=
28-
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.39 h1:fc0ukRAiP1syoSGZYu+DaE+FulSYhTiJ8WpVu5jElU4=
29-
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.39/go.mod h1:WLAW8PT7+JhjZfLSWe7WEJaJu0GNo0cKc2Zyo003RBs=
30-
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.23 h1:1SZBDiRzzs3sNhOMVApyWPduWYGAX0imGy06XiBnCAM=
31-
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.23/go.mod h1:i9TkxgbZmHVh2S0La6CAXtnyFhlCX/pJ0JsOvBAS6Mk=
32-
github.com/aws/aws-sdk-go-v2/service/ec2 v1.188.0 h1:u/sXT2dHfmK0bFPrnovX7y6qaRQAcQ3J3WyoBiEOkwc=
33-
github.com/aws/aws-sdk-go-v2/service/ec2 v1.188.0/go.mod h1:0A17IIeys01WfjDKehspGP+Cyo/YH/eNADIbEbRS9yM=
34-
github.com/aws/aws-sdk-go-v2/service/iam v1.38.0 h1:x2zxTpgLPylAKVZ1Lf7qiQkQHA7L5njP4eB01DrTlCw=
35-
github.com/aws/aws-sdk-go-v2/service/iam v1.38.0/go.mod h1:WJARDpnEOhixhh41f+kTTr67y28OvjIUVht++rfcILY=
36-
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 h1:TToQNkvGguu209puTojY/ozlqy2d/SFNcoLIqTFi42g=
37-
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0/go.mod h1:0jp+ltwkf+SwG2fm/PKo8t4y8pJSgOCO4D8Lz3k0aHQ=
38-
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.4 h1:aaPpoG15S2qHkWm4KlEyF01zovK1nW4BBbyXuHNSE90=
39-
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.4/go.mod h1:eD9gS2EARTKgGr/W5xwgY/ik9z/zqpW+m/xOQbVxrMk=
40-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.32/go.mod h1:4jwAWKEkCR0anWk5+1RbfSg1R5Gzld7NLiuaq5bTR/Y=
41-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4 h1:tHxQi/XHPK0ctd/wdOw0t7Xrc2OxcRCnVzv8lwWPu0c=
42-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4/go.mod h1:4GQbF1vJzG60poZqWatZlhP31y8PGCCVTvIGPdaaYJ0=
43-
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4 h1:E5ZAVOmI2apR8ADb72Q63KqwwwdW1XcMeXIlrZ1Psjg=
44-
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.4/go.mod h1:wezzqVUOVVdk+2Z/JzQT4NxAU0NbhRe5W8pIE72jsWI=
45-
github.com/aws/aws-sdk-go-v2/service/s3 v1.67.0 h1:SwaJ0w0MOp0pBTIKTamLVeTKD+iOWyNJRdJ2KCQRg6Q=
46-
github.com/aws/aws-sdk-go-v2/service/s3 v1.67.0/go.mod h1:TMhLIyRIyoGVlaEMAt+ITMbwskSTpcGsCPDq91/ihY0=
47-
github.com/aws/aws-sdk-go-v2/service/sso v1.13.2 h1:A2RlEMo4SJSwbNoUUgkxTAEMduAy/8wG3eB2b2lP4gY=
48-
github.com/aws/aws-sdk-go-v2/service/sso v1.13.2/go.mod h1:ju+nNXUunfIFamXUIZQiICjnO/TPlOmWcYhZcSy7xaE=
49-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.2 h1:OJELEgyaT2kmaBGZ+myyZbTTLobfe3ox3FSh5eYK9Qs=
50-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.2/go.mod h1:ubDBBaDFs1GHijSOTi8ljppML15GLG0HxhILtbjNNYQ=
51-
github.com/aws/aws-sdk-go-v2/service/sts v1.21.2/go.mod h1:FQ/DQcOfESELfJi5ED+IPPAjI5xC6nxtSolVVB773jM=
52-
github.com/aws/aws-sdk-go-v2/service/sts v1.33.0 h1:s7LRgBqhwLaxcocnAniBJp7gaAB+4I4vHzqUqjH18yc=
53-
github.com/aws/aws-sdk-go-v2/service/sts v1.33.0/go.mod h1:9XEUty5v5UAsMiFOBJrNibZgwCeOma73jgGwwhgffa8=
54-
github.com/aws/smithy-go v1.14.1/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
55-
github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM=
56-
github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
11+
github.com/aws/aws-sdk-go-v2 v1.32.5 h1:U8vdWJuY7ruAkzaOdD7guwJjD06YSKmnKCJs7s3IkIo=
12+
github.com/aws/aws-sdk-go-v2 v1.32.5/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
13+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8=
14+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc=
15+
github.com/aws/aws-sdk-go-v2/config v1.28.5 h1:Za41twdCXbuyyWv9LndXxZZv3QhTG1DinqlFsSuvtI0=
16+
github.com/aws/aws-sdk-go-v2/config v1.28.5/go.mod h1:4VsPbHP8JdcdUDmbTVgNL/8w9SqOkM5jyY8ljIxLO3o=
17+
github.com/aws/aws-sdk-go-v2/credentials v1.17.46 h1:AU7RcriIo2lXjUfHFnFKYsLCwgbz1E7Mm95ieIRDNUg=
18+
github.com/aws/aws-sdk-go-v2/credentials v1.17.46/go.mod h1:1FmYyLGL08KQXQ6mcTlifyFXfJVCNJTVGuQP4m0d/UA=
19+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20 h1:sDSXIrlsFSFJtWKLQS4PUWRvrT580rrnuLydJrCQ/yA=
20+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20/go.mod h1:WZ/c+w0ofps+/OUqMwWgnfrgzZH1DZO1RIkktICsqnY=
21+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24 h1:4usbeaes3yJnCFC7kfeyhkdkPtoRYPa/hTmCqMpKpLI=
22+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24/go.mod h1:5CI1JemjVwde8m2WG3cz23qHKPOxbpkq0HaoreEgLIY=
23+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 h1:N1zsICrQglfzaBnrfM0Ys00860C+QFwu6u/5+LomP+o=
24+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24/go.mod h1:dCn9HbJ8+K31i8IQ8EWmWj0EiIk0+vKiHNMxTTYveAg=
25+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
26+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
27+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.24 h1:JX70yGKLj25+lMC5Yyh8wBtvB01GDilyRuJvXJ4piD0=
28+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.24/go.mod h1:+Ln60j9SUTD0LEwnhEB0Xhg61DHqplBrbZpLgyjoEHg=
29+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.193.0 h1:RhSoBFT5/8tTmIseJUXM6INTXTQDF8+0oyxWBnozIms=
30+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.193.0/go.mod h1:mzj8EEjIHSN2oZRXiw1Dd+uB4HZTl7hC8nBzX9IZMWw=
31+
github.com/aws/aws-sdk-go-v2/service/iam v1.38.1 h1:hfkzDZHBp9jAT4zcd5mtqckpU4E3Ax0LQaEWWk1VgN8=
32+
github.com/aws/aws-sdk-go-v2/service/iam v1.38.1/go.mod h1:u36ahDtZcQHGmVm/r+0L1sfKX4fzLEMdCqiKRKkUMVM=
33+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y=
34+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE=
35+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.5 h1:gvZOjQKPxFXy1ft3QnEyXmT+IqneM9QAUWlM3r0mfqw=
36+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.5/go.mod h1:DLWnfvIcm9IET/mmjdxeXbBKmTCm0ZB8p1za9BVteM8=
37+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 h1:wtpJ4zcwrSbwhECWQoI/g6WM9zqCcSpHDJIWSbMLOu4=
38+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5/go.mod h1:qu/W9HXQbbQ4+1+JcZp0ZNPV31ym537ZJN+fiS7Ti8E=
39+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.5 h1:P1doBzv5VEg1ONxnJss1Kh5ZG/ewoIE4MQtKKc6Crgg=
40+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.5/go.mod h1:NOP+euMW7W3Ukt28tAxPuoWao4rhhqJD3QEBk7oCg7w=
41+
github.com/aws/aws-sdk-go-v2/service/s3 v1.68.0 h1:bFpcqdwtAEsgpZXvkTxIThFQx/EM0oV6kXmfFIGjxME=
42+
github.com/aws/aws-sdk-go-v2/service/s3 v1.68.0/go.mod h1:ralv4XawHjEMaHOWnTFushl0WRqim/gQWesAMF6hTow=
43+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 h1:3zu537oLmsPfDMyjnUS2g+F2vITgy5pB74tHI+JBNoM=
44+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.6/go.mod h1:WJSZH2ZvepM6t6jwu4w/Z45Eoi75lPN7DcydSRtJg6Y=
45+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 h1:K0OQAsDywb0ltlFrZm0JHPY3yZp/S9OaoLU33S7vPS8=
46+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5/go.mod h1:ORITg+fyuMoeiQFiVGoqB3OydVTLkClw/ljbblMq6Cc=
47+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 h1:6SZUVRQNvExYlMLbHdlKB48x0fLbc2iVROyaNEwBHbU=
48+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.1/go.mod h1:GqWyYCwLXnlUB1lOAXQyNSPqPLQJvmo8J0DWBzp9mtg=
49+
github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro=
50+
github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
5751
github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=
5852
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
5953
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
@@ -139,10 +133,6 @@ github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
139133
github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
140134
github.com/jefferai/isbadcipher v0.0.0-20190226160619-51d2077c035f h1:E87tDTVS5W65euzixn7clSzK66puSt1H4I5SC0EmHH4=
141135
github.com/jefferai/isbadcipher v0.0.0-20190226160619-51d2077c035f/go.mod h1:3J2qVK16Lq8V+wfiL2lPeDZ7UWMxk5LemerHa1p6N00=
142-
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
143-
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
144-
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
145-
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
146136
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
147137
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
148138
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
@@ -278,8 +268,6 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogR
278268
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
279269
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
280270
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
281-
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
282-
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
283271
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
284272
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
285273
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

plugin/plugin.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@ type AwsPlugin struct {
3232
func NewAwsPlugin() *AwsPlugin {
3333
return &AwsPlugin{
3434
HostPlugin: &host.HostPlugin{},
35-
StoragePlugin: &storage.StoragePlugin{},
35+
StoragePlugin: storage.New(),
3636
}
3737
}

plugin/service/storage/plugin.go

+56-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"os"
1515
"path"
1616
"strings"
17+
"sync"
1718

1819
"github.com/aws/aws-sdk-go-v2/aws"
1920
"github.com/aws/aws-sdk-go-v2/service/s3"
@@ -42,6 +43,59 @@ type StoragePlugin struct {
4243

4344
// testStorageStateOpts are passed in to the stored state to control test behavior
4445
testStorageStateOpts []awsStoragePersistedStateOption
46+
47+
clients *clientCache
48+
}
49+
50+
// Client caches previously initialized S3API clients created with a RoleARN attribute.
51+
type clientCache struct {
52+
// cache is a map of cached s3 clients. The key of the map
53+
// is the public id of the storage bucket
54+
cache map[string]S3API
55+
sync.RWMutex
56+
}
57+
58+
func New() *StoragePlugin {
59+
c := &clientCache{
60+
cache: make(map[string]S3API),
61+
}
62+
return &StoragePlugin{
63+
clients: c,
64+
}
65+
}
66+
67+
// GetClient returns an S3API client for the given storage bucket id.
68+
func (p *StoragePlugin) GetClient(ctx context.Context, storageBucketId string, storageState *awsStoragePersistedState, opts ...s3Option) (S3API, error) {
69+
if storageBucketId == "" {
70+
// No storage bucket ID to key cache on, create and return client
71+
client, err := storageState.S3Client(ctx, opts...)
72+
if err != nil {
73+
return nil, errors.BadRequestStatus("error creating S3 client: %s", err)
74+
}
75+
return client, nil
76+
}
77+
78+
p.clients.RLock()
79+
client, ok := p.clients.cache[storageBucketId]
80+
p.clients.RUnlock()
81+
if !ok {
82+
p.clients.Lock()
83+
// Check again in case another caller created it since we got lock
84+
client, ok = p.clients.cache[storageBucketId]
85+
if ok {
86+
p.clients.Unlock()
87+
return client, nil
88+
}
89+
defer p.clients.Unlock()
90+
91+
var err error
92+
client, err = storageState.S3Client(ctx, opts...)
93+
if err != nil {
94+
return nil, errors.BadRequestStatus("error creating S3 client: %s", err)
95+
}
96+
p.clients.cache[storageBucketId] = client
97+
}
98+
return client, nil
4599
}
46100

47101
// OnCreateStorageBucket is called when a storage bucket is created.
@@ -583,7 +637,8 @@ func (p *StoragePlugin) PutObject(ctx context.Context, req *pb.PutObjectRequest)
583637
if storageAttributes.EndpointUrl != "" {
584638
opts = append(opts, WithEndpoint(storageAttributes.EndpointUrl))
585639
}
586-
s3Client, err := storageState.S3Client(ctx, opts...)
640+
641+
s3Client, err := p.GetClient(ctx, bucket.GetId(), storageState, opts...)
587642
if err != nil {
588643
return nil, errors.BadRequestStatus("error getting S3 client: %s", err)
589644
}

0 commit comments

Comments
 (0)