Skip to content

Commit af6af4c

Browse files
authored
fix(datastore): handle not found errors from azure, s3 and gcs (#511)
1 parent cb02ead commit af6af4c

File tree

3 files changed

+66
-5
lines changed

3 files changed

+66
-5
lines changed

internal/datastore/storage/azure/azure.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@ func (a *Azure) Set(key string, value []byte, ttl int) error {
8484

8585
func (a *Azure) Delete(key string) error {
8686
_, err := a.Client.DeleteBlob(context.Background(), a.Config.Container, key, nil)
87+
if bloberror.HasCode(err, bloberror.BlobNotFound) {
88+
return &errors.StorageError{
89+
Err: err,
90+
Nil: true,
91+
}
92+
}
8793
if err != nil {
8894
return &errors.StorageError{
8995
Err: err,

internal/datastore/storage/gcs/gcs.go

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
"cloud.google.com/go/storage"
88
"github.com/padok-team/burrito/internal/burrito/config"
9+
errors "github.com/padok-team/burrito/internal/datastore/storage/error"
910
"google.golang.org/api/iterator"
1011
)
1112

@@ -33,14 +34,26 @@ func (a *GCS) Get(key string) ([]byte, error) {
3334
bucket := a.Client.Bucket(a.Config.Bucket)
3435
obj := bucket.Object(key)
3536
reader, err := obj.NewReader(ctx)
37+
if err == storage.ErrObjectNotExist {
38+
return make([]byte, 0), &errors.StorageError{
39+
Err: err,
40+
Nil: true,
41+
}
42+
}
3643
if err != nil {
37-
return nil, err
44+
return make([]byte, 0), &errors.StorageError{
45+
Err: err,
46+
Nil: false,
47+
}
3848
}
3949
defer reader.Close()
4050

4151
data, err := io.ReadAll(reader)
4252
if err != nil {
43-
return nil, err
53+
return make([]byte, 0), &errors.StorageError{
54+
Err: err,
55+
Nil: false,
56+
}
4457
}
4558

4659
return data, nil
@@ -55,7 +68,10 @@ func (a *GCS) Set(key string, data []byte, ttl int) error {
5568

5669
_, err := writer.Write(data)
5770
if err != nil {
58-
return err
71+
return &errors.StorageError{
72+
Err: err,
73+
Nil: false,
74+
}
5975
}
6076

6177
return nil
@@ -66,8 +82,17 @@ func (a *GCS) Check(key string) ([]byte, error) {
6682
bucket := a.Client.Bucket(a.Config.Bucket)
6783
obj := bucket.Object(key)
6884
metadata, err := obj.Attrs(ctx)
85+
if err == storage.ErrObjectNotExist {
86+
return make([]byte, 0), &errors.StorageError{
87+
Err: err,
88+
Nil: true,
89+
}
90+
}
6991
if err != nil {
70-
return nil, err
92+
return make([]byte, 0), &errors.StorageError{
93+
Err: err,
94+
Nil: false,
95+
}
7196
}
7297
return metadata.MD5, nil
7398
}
@@ -77,6 +102,12 @@ func (a *GCS) Delete(key string) error {
77102
bucket := a.Client.Bucket(a.Config.Bucket)
78103
obj := bucket.Object(key)
79104
err := obj.Delete(ctx)
105+
if err == storage.ErrObjectNotExist {
106+
return &errors.StorageError{
107+
Err: err,
108+
Nil: true,
109+
}
110+
}
80111
if err != nil {
81112
return err
82113
}

internal/datastore/storage/s3/s3.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ package s3
33
import (
44
"bytes"
55
"context"
6+
"errors"
67
"fmt"
78
"io"
89

910
sdk "github.com/aws/aws-sdk-go-v2/config"
1011
storage "github.com/aws/aws-sdk-go-v2/service/s3"
12+
"github.com/aws/aws-sdk-go-v2/service/s3/types"
1113
"github.com/aws/aws-sdk-go/aws"
1214
"github.com/padok-team/burrito/internal/burrito/config"
15+
storageerrors "github.com/padok-team/burrito/internal/datastore/storage/error"
1316
)
1417

1518
// Implements Storage interface using AWS S3
@@ -41,6 +44,13 @@ func (a *S3) Get(key string) ([]byte, error) {
4144

4245
result, err := a.Client.GetObject(context.TODO(), input)
4346
if err != nil {
47+
var noKey *types.NoSuchKey
48+
if errors.As(err, &noKey) {
49+
return nil, &storageerrors.StorageError{
50+
Err: err,
51+
Nil: true,
52+
}
53+
}
4454
return nil, err
4555
}
4656

@@ -62,7 +72,14 @@ func (a *S3) Check(key string) ([]byte, error) {
6272

6373
result, err := a.Client.HeadObject(context.TODO(), input)
6474
if err != nil {
65-
return nil, err
75+
var noKey *types.NoSuchKey
76+
if errors.As(err, &noKey) {
77+
return make([]byte, 0), &storageerrors.StorageError{
78+
Err: err,
79+
Nil: true,
80+
}
81+
}
82+
return make([]byte, 0), err
6683
}
6784

6885
return []byte(*result.ChecksumSHA256), nil
@@ -91,6 +108,13 @@ func (a *S3) Delete(key string) error {
91108

92109
_, err := a.Client.DeleteObject(context.TODO(), input)
93110
if err != nil {
111+
var noKey *types.NoSuchKey
112+
if errors.As(err, &noKey) {
113+
return &storageerrors.StorageError{
114+
Err: err,
115+
Nil: true,
116+
}
117+
}
94118
return err
95119
}
96120

0 commit comments

Comments
 (0)