Skip to content

Commit 50268e2

Browse files
committed
fix(datastore): handle not found errors from azure, s3 and gcs
1 parent cb02ead commit 50268e2

File tree

3 files changed

+67
-5
lines changed

3 files changed

+67
-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: 26 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,14 @@ 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+
54+
}
4455
return nil, err
4556
}
4657

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

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

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

92110
_, err := a.Client.DeleteObject(context.TODO(), input)
93111
if err != nil {
112+
var noKey *types.NoSuchKey
113+
if errors.As(err, &noKey) {
114+
return &storageerrors.StorageError{
115+
Err: err,
116+
Nil: true,
117+
}
118+
}
94119
return err
95120
}
96121

0 commit comments

Comments
 (0)