Skip to content

Commit cf4e104

Browse files
committed
migrate aws-sdk-go v1 to v2
1 parent 2754db5 commit cf4e104

File tree

18 files changed

+281
-1872
lines changed

18 files changed

+281
-1872
lines changed

backend/go.mod

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,17 @@ require (
6666
github.com/armon/go-metrics v0.4.1 // indirect
6767
github.com/armon/go-radix v1.0.0 // indirect
6868
github.com/aws/aws-sdk-go v1.51.21 // indirect
69+
github.com/aws/aws-sdk-go-v2 v1.16.16 // indirect
70+
github.com/aws/aws-sdk-go-v2/config v1.15.13 // indirect
71+
github.com/aws/aws-sdk-go-v2/credentials v1.12.8 // indirect
72+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.8 // indirect
73+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.23 // indirect
74+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.17 // indirect
75+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.15 // indirect
76+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.8 // indirect
77+
github.com/aws/aws-sdk-go-v2/service/sso v1.11.11 // indirect
78+
github.com/aws/aws-sdk-go-v2/service/sts v1.16.9 // indirect
79+
github.com/aws/smithy-go v1.13.3 // indirect
6980
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
7081
github.com/blang/semver v3.5.1+incompatible // indirect
7182
github.com/bmatcuk/doublestar v1.3.1 // indirect
@@ -101,7 +112,6 @@ require (
101112
github.com/golang/snappy v0.0.4 // indirect
102113
github.com/google/go-cmp v0.6.0 // indirect
103114
github.com/google/go-github/v35 v35.3.0 // indirect
104-
github.com/google/go-github/v57 v57.0.0 // indirect
105115
github.com/google/go-github/v59 v59.0.0 // indirect
106116
github.com/google/go-github/v60 v60.0.0 // indirect
107117
github.com/google/go-querystring v1.1.0 // indirect

backend/go.sum

Lines changed: 28 additions & 97 deletions
Large diffs are not rendered by default.

cli/go.mod

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
cloud.google.com/go/storage v1.39.1
99
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.2
1010
github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.2.0
11-
github.com/aws/aws-sdk-go v1.51.21
11+
github.com/aws/aws-sdk-go v1.51.21 // indirect
1212
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
1313
github.com/google/uuid v1.6.0
1414
github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5
@@ -21,7 +21,12 @@ require (
2121
require (
2222
github.com/aws/aws-sdk-go-v2 v1.26.1
2323
github.com/aws/aws-sdk-go-v2/config v1.27.11
24+
github.com/aws/aws-sdk-go-v2/credentials v1.17.11
25+
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.13
26+
github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression v1.7.13
27+
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1
2428
github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1
29+
github.com/aws/aws-sdk-go-v2/service/sts v1.28.6
2530
github.com/aws/smithy-go v1.20.2
2631
github.com/caarlos0/env/v8 v8.0.0
2732
github.com/diggerhq/digger/libs v0.4.13
@@ -54,19 +59,19 @@ require (
5459
github.com/armon/go-metrics v0.4.1 // indirect
5560
github.com/armon/go-radix v1.0.0 // indirect
5661
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
57-
github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect
5862
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect
5963
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect
6064
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect
6165
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
6266
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 // indirect
67+
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.4 // indirect
6368
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
6469
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 // indirect
70+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 // indirect
6571
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect
6672
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 // indirect
6773
github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect
6874
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect
69-
github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 // indirect
7075
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
7176
github.com/blang/semver v3.5.1+incompatible // indirect
7277
github.com/bmatcuk/doublestar v1.3.1 // indirect

cli/go.sum

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,10 @@ github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSR
322322
github.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE=
323323
github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs=
324324
github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo=
325+
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.13 h1:loQ4VSt3hTm9n8ST9jveArwmhqAc5aiRJXlxLPxCNTw=
326+
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.13/go.mod h1:RjdeQvzJuUf9jWj+ta+7l3VnVpDZ+RmtP/p+QdwRIpI=
327+
github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression v1.7.13 h1:4dTgKDA9gO1s0gdeVJh9Nid2/q9dJ2lUC0XbJqbWOUo=
328+
github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression v1.7.13/go.mod h1:otybei7IbiLt2YGJRQCi7MWi6r+az3ukC9TiwRPkltw=
325329
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4=
326330
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg=
327331
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg=
@@ -332,10 +336,16 @@ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7
332336
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
333337
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 h1:81KE7vaZzrl7yHBYHVEzYB8sypz11NMOZ40YlWvPxsU=
334338
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5/go.mod h1:LIt2rg7Mcgn09Ygbdh/RdIm0rQ+3BNkbP1gyVMFtRK0=
339+
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 h1:dZXY07Dm59TxAjJcUfNMJHLDI/gLMxTRZefn2jFAVsw=
340+
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1/go.mod h1:lVLqEtX+ezgtfalyJs7Peb0uv9dEpAQP5yuq2O26R44=
341+
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.4 h1:hSwDD19/e01z3pfyx+hDeX5T/0Sn+ZEnnTO5pVWKWx8=
342+
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.4/go.mod h1:61CuGwE7jYn0g2gl7K3qoT4vCY59ZQEixkPu8PN5IrE=
335343
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs=
336344
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=
337345
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 h1:ZMeFZ5yk+Ek+jNr1+uwCd2tG89t6oTS5yVWpa6yy2es=
338346
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7/go.mod h1:mxV05U+4JiHqIpGqqYXOHLPKUC6bDXC44bsUhNjOEwY=
347+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 h1:6tayEze2Y+hiL3kdnEUxSPsP+pJsUfwLSFspFl1ru9Q=
348+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6/go.mod h1:qVNb/9IOVsLCZh0x2lnagrBwQ9fxajUpXS7OZfIsKn0=
339349
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo=
340350
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk=
341351
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 h1:f9RyWNtS8oH7cZlbn+/JNPpjUk5+5fLd5lM9M0i49Ys=

cli/pkg/aws/dynamo_locking.go

Lines changed: 69 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package aws
22

33
import (
4+
"context"
5+
"errors"
46
"log"
57
"os"
6-
"strconv"
78
"time"
89

9-
"github.com/aws/aws-sdk-go/aws"
10-
"github.com/aws/aws-sdk-go/aws/awserr"
11-
"github.com/aws/aws-sdk-go/service/dynamodb"
12-
"github.com/aws/aws-sdk-go/service/dynamodb/expression"
10+
"github.com/aws/aws-sdk-go-v2/aws"
11+
"github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue"
12+
"github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression"
13+
14+
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
15+
"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
16+
17+
"github.com/aws/smithy-go"
1318
)
1419

1520
const (
@@ -20,30 +25,27 @@ const (
2025
)
2126

2227
type DynamoDbLock struct {
23-
DynamoDb *dynamodb.DynamoDB
28+
DynamoDb *dynamodb.Client
2429
}
2530

2631
func isResourceNotFoundExceptionError(err error) bool {
2732
if err != nil {
28-
aerr, ok := err.(awserr.Error)
29-
if !ok {
30-
// not aws error
31-
return false
32-
}
33-
34-
if aerr.Code() == dynamodb.ErrCodeResourceNotFoundException {
35-
// ErrCodeResourceNotFoundException code
36-
return true
33+
var apiError smithy.APIError
34+
if errors.As(err, &apiError) {
35+
switch apiError.(type) {
36+
case *types.ResourceNotFoundException:
37+
return true
38+
}
3739
}
3840
}
3941
return false
4042
}
4143

42-
func (dynamoDbLock *DynamoDbLock) waitUntilTableCreated() error {
44+
func (dynamoDbLock *DynamoDbLock) waitUntilTableCreated(ctx context.Context) error {
4345
input := &dynamodb.DescribeTableInput{
4446
TableName: aws.String(TABLE_NAME),
4547
}
46-
status, err := dynamoDbLock.DynamoDb.DescribeTable(input)
48+
status, err := dynamoDbLock.DynamoDb.DescribeTable(ctx, input)
4749
cnt := 0
4850

4951
if err != nil {
@@ -52,9 +54,9 @@ func (dynamoDbLock *DynamoDbLock) waitUntilTableCreated() error {
5254
}
5355
}
5456

55-
for *status.Table.TableStatus != "ACTIVE" {
57+
for status.Table.TableStatus != "ACTIVE" {
5658
time.Sleep(TableCreationInterval)
57-
status, err = dynamoDbLock.DynamoDb.DescribeTable(input)
59+
status, err = dynamoDbLock.DynamoDb.DescribeTable(ctx, input)
5860
if err != nil {
5961
if !isResourceNotFoundExceptionError(err) {
6062
return err
@@ -72,8 +74,8 @@ func (dynamoDbLock *DynamoDbLock) waitUntilTableCreated() error {
7274
}
7375

7476
// TODO: refactor func to return actual error and fail on callers
75-
func (dynamoDbLock *DynamoDbLock) createTableIfNotExists() error {
76-
_, err := dynamoDbLock.DynamoDb.DescribeTable(&dynamodb.DescribeTableInput{
77+
func (dynamoDbLock *DynamoDbLock) createTableIfNotExists(ctx context.Context) error {
78+
_, err := dynamoDbLock.DynamoDb.DescribeTable(ctx, &dynamodb.DescribeTableInput{
7779
TableName: aws.String(TABLE_NAME),
7880
})
7981

@@ -84,38 +86,39 @@ func (dynamoDbLock *DynamoDbLock) createTableIfNotExists() error {
8486
}
8587

8688
createtbl_input := &dynamodb.CreateTableInput{
87-
AttributeDefinitions: []*dynamodb.AttributeDefinition{
89+
90+
AttributeDefinitions: []types.AttributeDefinition{
8891
{
8992
AttributeName: aws.String("PK"),
90-
AttributeType: aws.String("S"),
93+
AttributeType: types.ScalarAttributeTypeS,
9194
},
9295
{
9396
AttributeName: aws.String("SK"),
94-
AttributeType: aws.String("S"),
97+
AttributeType: types.ScalarAttributeTypeS,
9598
},
9699
},
97-
KeySchema: []*dynamodb.KeySchemaElement{
100+
KeySchema: []types.KeySchemaElement{
98101
{
99102
AttributeName: aws.String("PK"),
100-
KeyType: aws.String("HASH"),
103+
KeyType: types.KeyTypeHash,
101104
},
102105
{
103106
AttributeName: aws.String("SK"),
104-
KeyType: aws.String("RANGE"),
107+
KeyType: types.KeyTypeRange,
105108
},
106109
},
107-
BillingMode: aws.String("PAY_PER_REQUEST"),
110+
BillingMode: types.BillingModePayPerRequest,
108111
TableName: aws.String(TABLE_NAME),
109112
}
110-
_, err = dynamoDbLock.DynamoDb.CreateTable(createtbl_input)
113+
_, err = dynamoDbLock.DynamoDb.CreateTable(ctx, createtbl_input)
111114
if err != nil {
112115
if os.Getenv("DEBUG") != "" {
113116
log.Printf("%v\n", err)
114117
}
115118
return err
116119
}
117120

118-
err = dynamoDbLock.waitUntilTableCreated()
121+
err = dynamoDbLock.waitUntilTableCreated(ctx)
119122
if err != nil {
120123
log.Printf("%v\n", err)
121124
return err
@@ -125,7 +128,8 @@ func (dynamoDbLock *DynamoDbLock) createTableIfNotExists() error {
125128
}
126129

127130
func (dynamoDbLock *DynamoDbLock) Lock(transactionId int, resource string) (bool, error) {
128-
dynamoDbLock.createTableIfNotExists()
131+
ctx := context.Background()
132+
dynamoDbLock.createTableIfNotExists(ctx)
129133
// TODO: remove timeout completely
130134
now := time.Now().Format(time.RFC3339)
131135
newTimeout := time.Now().Add(TableLockTimeout).Format(time.RFC3339)
@@ -143,24 +147,28 @@ func (dynamoDbLock *DynamoDbLock) Lock(transactionId int, resource string) (bool
143147
).Set(expression.Name("timeout"), expression.Value(newTimeout)),
144148
).
145149
Build()
146-
147150
if err != nil {
148151
return false, err
149152
}
150153

151154
input := &dynamodb.UpdateItemInput{
152-
TableName: aws.String(TABLE_NAME),
153-
Key: map[string]*dynamodb.AttributeValue{"PK": {S: aws.String("LOCK")}, "SK": {S: aws.String("RES#" + resource)}},
155+
TableName: aws.String(TABLE_NAME),
156+
Key: map[string]types.AttributeValue{
157+
"PK": &types.AttributeValueMemberS{Value: "LOCK"},
158+
"SK": &types.AttributeValueMemberS{Value: "RES#" + resource},
159+
},
154160
ConditionExpression: expr.Condition(),
155161
ExpressionAttributeNames: expr.Names(),
156162
ExpressionAttributeValues: expr.Values(),
157163
UpdateExpression: expr.Update(),
158164
}
159165

160-
_, err = dynamoDbLock.DynamoDb.UpdateItem(input)
166+
_, err = dynamoDbLock.DynamoDb.UpdateItem(ctx, input)
161167
if err != nil {
162-
if aerr, ok := err.(awserr.Error); ok {
163-
if aerr.Code() == dynamodb.ErrCodeConditionalCheckFailedException {
168+
var apiError smithy.APIError
169+
if errors.As(err, &apiError) {
170+
switch apiError.(type) {
171+
case *types.ConditionalCheckFailedException:
164172
return false, nil
165173
}
166174
}
@@ -171,36 +179,50 @@ func (dynamoDbLock *DynamoDbLock) Lock(transactionId int, resource string) (bool
171179
}
172180

173181
func (dynamoDbLock *DynamoDbLock) Unlock(resource string) (bool, error) {
174-
dynamoDbLock.createTableIfNotExists()
182+
ctx := context.Background()
183+
dynamoDbLock.createTableIfNotExists(ctx)
175184
input := &dynamodb.DeleteItemInput{
176185
TableName: aws.String(TABLE_NAME),
177-
Key: map[string]*dynamodb.AttributeValue{"PK": {S: aws.String("LOCK")}, "SK": {S: aws.String("RES#" + resource)}},
186+
Key: map[string]types.AttributeValue{
187+
"PK": &types.AttributeValueMemberS{Value: "LOCK"},
188+
"SK": &types.AttributeValueMemberS{Value: "RES#" + resource},
189+
},
178190
}
179191

180-
_, err := dynamoDbLock.DynamoDb.DeleteItem(input)
192+
_, err := dynamoDbLock.DynamoDb.DeleteItem(ctx, input)
181193
if err != nil {
182194
return false, err
183195
}
184196
return true, nil
185197
}
186198

187199
func (dynamoDbLock *DynamoDbLock) GetLock(lockId string) (*int, error) {
188-
dynamoDbLock.createTableIfNotExists()
200+
ctx := context.Background()
201+
dynamoDbLock.createTableIfNotExists(ctx)
189202
input := &dynamodb.GetItemInput{
190203
TableName: aws.String(TABLE_NAME),
191-
Key: map[string]*dynamodb.AttributeValue{"PK": {S: aws.String("LOCK")}, "SK": {S: aws.String("RES#" + lockId)}},
204+
Key: map[string]types.AttributeValue{
205+
"PK": &types.AttributeValueMemberS{Value: "LOCK"},
206+
"SK": &types.AttributeValueMemberS{Value: "RES#" + lockId},
207+
},
192208
}
193209

194-
result, err := dynamoDbLock.DynamoDb.GetItem(input)
210+
result, err := dynamoDbLock.DynamoDb.GetItem(ctx, input)
195211
if err != nil {
196212
return nil, err
197213
}
198214

199-
if result.Item != nil {
200-
transactionId := result.Item["transaction_id"].N
201-
res, err := strconv.Atoi(*transactionId)
202-
return &res, err
215+
type TransactionLock struct {
216+
TransactionID int `dynamodbav:"transaction_id"`
203217
}
204218

219+
var t TransactionLock
220+
err = attributevalue.UnmarshalMap(result.Item, &t)
221+
if err != nil {
222+
return nil, err
223+
}
224+
if t.TransactionID != 0 {
225+
return &t.TransactionID, nil
226+
}
205227
return nil, nil
206228
}

0 commit comments

Comments
 (0)