Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

use aws-sdk-go-v2 #43

Open
wants to merge 69 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 66 commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
ac0984e
go get github.com/aws/aws-sdk-go-v2/service/dynamodb
shamaton Apr 22, 2023
67df3b2
import github.com/aws/aws-sdk-go-v2/service/dynamodb
shamaton Apr 22, 2023
9bd6e90
fix dax/internal/client/projection.go
shamaton Apr 22, 2023
45cf488
fix translate methods @ request.go
shamaton Apr 22, 2023
0ecfa56
fix expressions
shamaton Apr 22, 2023
02e0852
use aws-sdk-go-v2/service/dynamodb @ request.go
shamaton Apr 22, 2023
aba99e9
use aws-sdk-go-v2/service/dynamodb @ attrval.go
shamaton Apr 22, 2023
9dcab3b
use aws-sdk-go-v2/service/dynamodb @ item.go
shamaton Apr 22, 2023
7f20648
use aws-sdk-go-v2/service/dynamodb @ response.go
shamaton Apr 22, 2023
4f55f2a
use aws-sdk-go-v2/service/dynamodb @ projection.go
shamaton Apr 23, 2023
f8a8bf9
use aws-sdk-go-v2/service/dynamodb @ single.go
shamaton Apr 23, 2023
8be6663
add github.com/aws/aws-sdk-go-v2
shamaton Apr 25, 2023
4879ea2
fix internal/cbor tests
shamaton Apr 25, 2023
cb867a9
fix internal/parser tests
shamaton Apr 25, 2023
39f8355
fix api_test, pagination_test
shamaton May 8, 2023
e848698
use smithy error in cbor
shamaton May 12, 2023
65beca5
add client logger to replace aws.Logger
shamaton May 14, 2023
61804f1
use client.Logger
shamaton May 14, 2023
1be9c6e
dax.Dax is compatible to v2 dynamodb
shamaton May 16, 2023
1cec2eb
use v2 credential provider
shamaton May 18, 2023
a30a414
fix client tests
shamaton May 18, 2023
d303535
update client package
shamaton May 18, 2023
3e8e422
use smithy-go logging
shamaton May 18, 2023
285c129
fix config.HostPorts
shamaton May 18, 2023
e2397b6
fix service_test
shamaton May 18, 2023
46730e4
WithSession functions replace to WithSDKConfig
shamaton May 18, 2023
8172ddf
fix logger called method
shamaton May 18, 2023
b5a67d6
delete NewDaxRequest
shamaton May 20, 2023
d75a83a
use v2 aws.Retryer
shamaton May 23, 2023
5190eb4
use context.Context
shamaton May 24, 2023
32b57c7
set timeout with context
shamaton May 24, 2023
b09eba9
No need to initialize and pass variables
shamaton May 25, 2023
198eba8
delete send/build methods
shamaton May 25, 2023
708eb7b
no need clientBuilder interface
shamaton May 26, 2023
9b62c58
use smithy error in cluster.go
shamaton May 26, 2023
e814f0b
replace from aws2 to aws
shamaton May 26, 2023
d2fc584
use smithy error in single.go
shamaton May 26, 2023
b27696f
rename method from SetTimeout to ContextWithTimeout
shamaton May 27, 2023
506e751
use context.Context in single.go
shamaton May 27, 2023
16f8b4f
fix tubePool.logDebug
shamaton May 27, 2023
277dd5f
always return smithy.OperationError when calling api
shamaton May 27, 2023
a83e5b0
fix stub.go
shamaton May 27, 2023
ace3dbd
fix error objects in cbor package
shamaton May 27, 2023
0c93956
fix error objects in parser package
shamaton May 28, 2023
6db3e5f
use context.Context in lru.go
shamaton May 28, 2023
fac8c61
fix regacy.go
shamaton May 28, 2023
400127a
fix error objects in client package
shamaton May 29, 2023
6b70746
use context.Context in client package
shamaton May 29, 2023
8ec50c0
comment out ValidateConfig
shamaton May 29, 2023
f4821e5
no need translateError
shamaton May 29, 2023
ada7f8f
fix error objects in client package
shamaton May 29, 2023
b69deec
make client package buildable
shamaton May 31, 2023
0b6c683
use context.Context in lru
shamaton May 31, 2023
1ad0877
fix TestTranslateLegacyNegative
shamaton Jun 1, 2023
91d6cde
fix cluster codes and tests
shamaton Jun 1, 2023
1804a9d
fix single_test
shamaton Jun 1, 2023
8ac48ad
update go.mod, not required github.com/aws/aws-sdk-go
shamaton Jun 1, 2023
9ff4a05
fix legacy.go
shamaton Jun 2, 2023
8688bf1
fix projection codes and tests
shamaton Jun 2, 2023
20de45b
fix error_test.go
shamaton Jun 2, 2023
d8872c6
CreateGlobalTableRequest is not available in dynamodb
shamaton Jun 2, 2023
0df8dc4
implement paging functionality if necessary
shamaton Jun 2, 2023
5d1e5d7
if ProjectionExpression is not nil, Should set Select type
shamaton Jun 9, 2023
9a96dfb
delete config validation and request_options tests
shamaton Jun 9, 2023
99cf40a
delete dax original retryer
shamaton Jun 9, 2023
5cc083a
delete unused code in convertDaxError
shamaton Jun 9, 2023
39275d2
delete masked BatchGetItemPages function
shamaton Aug 1, 2023
9154e67
Merge branch 'master' into v2
shamaton Aug 1, 2023
eaf620e
eliminate Config.RequestTimeout
shamaton Sep 16, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,050 changes: 251 additions & 799 deletions dax/api.go

Large diffs are not rendered by default.

35 changes: 3 additions & 32 deletions dax/api_test.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package dax

import (
"context"
"testing"

"github.com/aws/aws-dax-go/dax/internal/client"
"github.com/aws/aws-sdk-go/service/dynamodb"
)

// https://github.com/aws/aws-dax-go/issues/27
func TestUnimplementedBehavior(t *testing.T) {
dax := createClient(t)

// CreateBackup is not implemented by DAX
o, err := dax.CreateBackup(nil)
o, err := dax.CreateBackup(context.Background(), nil)

if o != nil {
t.Errorf("expect nil from unimplemented method, got %v", o)
Expand All @@ -22,40 +22,11 @@ func TestUnimplementedBehavior(t *testing.T) {
}
}

func TestUnimplementedRequestBehavior(t *testing.T) {
dax := createClient(t)

// CreateGlobalTable is not implemented by DAX
params := &dynamodb.CreateGlobalTableInput{
GlobalTableName: nil,
ReplicationGroup: []*dynamodb.Replica{},
}
req, o := dax.CreateGlobalTableRequest(params)

// Build() should return an error
err := req.Build()
if err == nil || err.Error() != client.ErrCodeNotImplemented {
t.Errorf("expect not implemented error, got %v", err)
}
if o.GlobalTableDescription != nil {
t.Errorf("expect unfilled response from unimplemented method, got %v", o)
}

// Send() should return an error
err = req.Send()
if err == nil || err.Error() != client.ErrCodeNotImplemented {
t.Errorf("expect not implemented error, got %v", err)
}
if o.GlobalTableDescription != nil {
t.Errorf("expect unfilled response from unimplemented method, got %v", o)
}
}

func createClient(t *testing.T) *Dax {
cfg := DefaultConfig()
cfg.HostPorts = []string{"127.0.0.1:8111"}
cfg.Region = "us-west-2"
dax, err := New(cfg)
dax, err := New(context.Background(), cfg)
if err != nil {
t.Errorf("expect no error, got %v", err)
}
Expand Down
146 changes: 75 additions & 71 deletions dax/internal/cbor/attrval.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@
package cbor

import (
"errors"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/service/dynamodb"
"math/big"
"strconv"
"strings"

"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
"github.com/aws/smithy-go"
)

const (
Expand All @@ -33,81 +33,81 @@ const (
tagDocumentPathOrdinal
)

func EncodeAttributeValue(value *dynamodb.AttributeValue, writer *Writer) error {
func EncodeAttributeValue(value types.AttributeValue, writer *Writer) error {
if value == nil {
return awserr.New(request.InvalidParameterErrCode, "invalid attribute value: nil", nil)
return &smithy.SerializationError{Err: errors.New("invalid attribute value: nil")}
}

var err error
switch {
case value.S != nil:
err = writer.WriteString(*value.S)
case value.N != nil:
err = writeStringNumber(*value.N, writer)
case value.B != nil:
err = writer.WriteBytes(value.B)
case value.SS != nil:
switch v := value.(type) {
case *types.AttributeValueMemberS:
err = writer.WriteString(v.Value)
case *types.AttributeValueMemberN:
err = writeStringNumber(v.Value, writer)
case *types.AttributeValueMemberB:
err = writer.WriteBytes(v.Value)
case *types.AttributeValueMemberSS:
if err = writer.writeType(Tag, tagStringSet); err != nil {
return err
}
if err = writer.WriteArrayHeader(len(value.SS)); err != nil {
if err = writer.WriteArrayHeader(len(v.Value)); err != nil {
return err
}
for _, sp := range value.SS {
if err := writer.WriteString(*sp); err != nil {
for _, sp := range v.Value {
if err := writer.WriteString(sp); err != nil {
return err
}
}
case value.NS != nil:
case *types.AttributeValueMemberNS:
if err = writer.writeType(Tag, tagNumberSet); err != nil {
return err
}
if err = writer.WriteArrayHeader(len(value.NS)); err != nil {
if err = writer.WriteArrayHeader(len(v.Value)); err != nil {
return err
}
for _, sp := range value.NS {
if err := writeStringNumber(*sp, writer); err != nil {
for _, sp := range v.Value {
if err := writeStringNumber(sp, writer); err != nil {
return err
}
}
case value.BS != nil:
case *types.AttributeValueMemberBS:
if err = writer.writeType(Tag, tagBinarySet); err != nil {
return err
}
if err = writer.WriteArrayHeader(len(value.BS)); err != nil {
if err = writer.WriteArrayHeader(len(v.Value)); err != nil {
return err
}
for _, bp := range value.BS {
for _, bp := range v.Value {
if err := writer.WriteBytes(bp); err != nil {
return err
}
}
case value.L != nil:
if err = writer.WriteArrayHeader(len(value.L)); err != nil {
case *types.AttributeValueMemberL:
if err = writer.WriteArrayHeader(len(v.Value)); err != nil {
return err
}
for _, v := range value.L {
for _, v := range v.Value {
if err := EncodeAttributeValue(v, writer); err != nil {
return err
}
}
case value.M != nil:
if err = writer.WriteMapHeader(len(value.M)); err != nil {
case *types.AttributeValueMemberM:
if err = writer.WriteMapHeader(len(v.Value)); err != nil {
return err
}
for k, v := range value.M {
for k, v := range v.Value {
if err := writer.WriteString(k); err != nil {
return err
}
if err = EncodeAttributeValue(v, writer); err != nil {
return err
}
}
case value.BOOL != nil:
err = writer.WriteBoolean(*value.BOOL)
case value.NULL != nil:
if !(*value.NULL) {
return awserr.New(request.InvalidParameterErrCode, "invalid null attribute value", nil) // DaxJavaClient suppress this error
case *types.AttributeValueMemberBOOL:
err = writer.WriteBoolean(v.Value)
case *types.AttributeValueMemberNULL:
if !v.Value {
return &smithy.SerializationError{Err: errors.New("invalid null attribute value")} // DaxJavaClient suppress this error
}
err = writer.WriteNull()
}
Expand All @@ -118,7 +118,7 @@ func writeStringNumber(val string, writer *Writer) error {
if strings.IndexAny(val, ".eE") >= 0 {
dec := new(Decimal)
if _, ok := dec.SetString(val); !ok {
return awserr.New(request.InvalidParameterErrCode, fmt.Sprintf("invalid number %v", val), nil)
return &smithy.SerializationError{Err: fmt.Errorf("invalid number %v", val)}
}
err := writer.WriteDecimal(dec)
return err
Expand All @@ -131,13 +131,13 @@ func writeStringNumber(val string, writer *Writer) error {
}
i, err := strconv.ParseInt(val, 10, 64)
if err != nil {
return awserr.New(request.InvalidParameterErrCode, fmt.Sprintf("invalid number %v", val), err)
return &smithy.SerializationError{Err: fmt.Errorf("invalid number %v", val)}
}
err = writer.WriteInt64(i)
return err
}

func DecodeAttributeValue(reader *Reader) (*dynamodb.AttributeValue, error) {
func DecodeAttributeValue(reader *Reader) (types.AttributeValue, error) {
hdr, err := reader.PeekHeader()
if err != nil {
return nil, err
Expand All @@ -151,34 +151,34 @@ func DecodeAttributeValue(reader *Reader) (*dynamodb.AttributeValue, error) {
if err != nil {
return nil, err
}
return &dynamodb.AttributeValue{S: &s}, nil
return &types.AttributeValueMemberS{Value: s}, nil
case Bytes:
b, err := reader.ReadBytes()
if err != nil {
return nil, err
}
return &dynamodb.AttributeValue{B: b}, nil
return &types.AttributeValueMemberB{Value: b}, nil
case Array:
len, err := reader.ReadArrayLength()
length, err := reader.ReadArrayLength()
if err != nil {
return nil, err
}
as := make([]*dynamodb.AttributeValue, len)
for i := 0; i < len; i++ {
as := make([]types.AttributeValue, length)
for i := 0; i < length; i++ {
a, err := DecodeAttributeValue(reader)
if err != nil {
return nil, err
}
as[i] = a
}
return &dynamodb.AttributeValue{L: as}, nil
return &types.AttributeValueMemberL{Value: as}, nil
case Map:
len, err := reader.ReadMapLength()
length, err := reader.ReadMapLength()
if err != nil {
return nil, err
}
m := make(map[string]*dynamodb.AttributeValue, len)
for i := 0; i < len; i++ {
m := make(map[string]types.AttributeValue, length)
for i := 0; i < length; i++ {
k, err := reader.ReadString()
if err != nil {
return nil, err
Expand All @@ -189,26 +189,26 @@ func DecodeAttributeValue(reader *Reader) (*dynamodb.AttributeValue, error) {
}
m[k] = v
}
return &dynamodb.AttributeValue{M: m}, nil
return &types.AttributeValueMemberM{Value: m}, nil
case PosInt, NegInt:
s, err := reader.ReadCborIntegerToString()
if err != nil {
return nil, err
}
return &dynamodb.AttributeValue{N: &s}, nil
return &types.AttributeValueMemberN{Value: s}, nil
case Simple:
if _, _, err := reader.readTypeHeader(); err != nil {
return nil, err
}
switch hdr {
case False:
return &dynamodb.AttributeValue{BOOL: aws.Bool(false)}, nil
return &types.AttributeValueMemberBOOL{Value: false}, nil
case True:
return &dynamodb.AttributeValue{BOOL: aws.Bool(true)}, nil
return &types.AttributeValueMemberBOOL{Value: true}, nil
case Nil:
return &dynamodb.AttributeValue{NULL: aws.Bool(true)}, nil
return &types.AttributeValueMemberNULL{Value: true}, nil
default:
return nil, awserr.New(request.ErrCodeSerialization, fmt.Sprintf("unknown minor type %d for simple major type", minor), nil)
return nil, &smithy.DeserializationError{Err: fmt.Errorf("unknown minor type %d for simple major type", minor)}
}
case Tag:
switch minor {
Expand All @@ -217,66 +217,70 @@ func DecodeAttributeValue(reader *Reader) (*dynamodb.AttributeValue, error) {
if err != nil {
return nil, err
}
return &dynamodb.AttributeValue{N: aws.String(i.String())}, nil
return &types.AttributeValueMemberN{Value: i.String()}, nil
case TagDecimal:
d, err := reader.ReadDecimal()
if err != nil {
return nil, err
}
return &dynamodb.AttributeValue{N: aws.String(d.String())}, nil
return &types.AttributeValueMemberN{Value: d.String()}, nil
default:
_, tag, err := reader.readTypeHeader()
if err != nil {
return nil, err
}
switch tag {
case tagStringSet:
len, err := reader.ReadArrayLength()
length, err := reader.ReadArrayLength()
if err != nil {
return nil, err
}
ss := make([]*string, len)
for i := 0; i < len; i++ {
ss := make([]string, length)
for i := 0; i < length; i++ {
s, err := reader.ReadString()
if err != nil {
return nil, err
}
ss[i] = &s
ss[i] = s
}
return &dynamodb.AttributeValue{SS: ss}, nil
return &types.AttributeValueMemberSS{Value: ss}, nil
case tagNumberSet:
len, err := reader.ReadArrayLength()
length, err := reader.ReadArrayLength()
if err != nil {
return nil, err
}
ss := make([]*string, len)
for i := 0; i < len; i++ {
ss := make([]string, length)
for i := 0; i < length; i++ {
av, err := DecodeAttributeValue(reader)
if err != nil {
return nil, err
}
ss[i] = av.N
n, ok := av.(*types.AttributeValueMemberN)
if !ok {
return nil, &smithy.DeserializationError{Err: fmt.Errorf("attribute type is not number. type: %T", av)}
}
ss[i] = n.Value
}
return &dynamodb.AttributeValue{NS: ss}, nil
return &types.AttributeValueMemberNS{Value: ss}, nil
case tagBinarySet:
len, err := reader.ReadArrayLength()
length, err := reader.ReadArrayLength()
if err != nil {
return nil, err
}
bs := make([][]byte, len)
for i := 0; i < len; i++ {
bs := make([][]byte, length)
for i := 0; i < length; i++ {
b, err := reader.ReadBytes()
if err != nil {
return nil, err
}
bs[i] = b
}
return &dynamodb.AttributeValue{BS: bs}, nil
return &types.AttributeValueMemberBS{Value: bs}, nil
default:
return nil, awserr.New(request.ErrCodeSerialization, fmt.Sprintf("unknown minor type %d or tag %d", minor, tag), nil)
return nil, &smithy.DeserializationError{Err: fmt.Errorf("unknown minor type %d or tag %d", minor, tag)}
}
}
default:
return nil, awserr.New(request.ErrCodeSerialization, fmt.Sprintf("unknown major type %d", major), nil)
return nil, &smithy.DeserializationError{Err: fmt.Errorf("unknown major type %d", major)}
}
}
Loading