Skip to content

Commit e936c2d

Browse files
authored
convertMinioError: stop shadowing minio error with os.ErrNotExist (#31)
* convertMinioError: stop shadowing minio error with os.ErrNotFound `convertMinioError` would ignore the actual error and return `os.ErrNotFound` when the StatusCode field of minio error is 404. Now, `os.ErrNotFound` and the minio error are wrapped together, allowing to propagate the original meaning of the error. * convertMinioError: wrap only one err, differentiate call from doList * convertMinioError: keep more readable `err` variable instead of `e`
1 parent 75237ca commit e936c2d

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

backends/s3/s3.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ func (b *Backend) doList(ctx context.Context, prefix string) (simpleblob.BlobLis
170170
})
171171
for obj := range objCh {
172172
// Handle error returned by MinIO client
173-
if err := convertMinioError(obj.Err); err != nil {
173+
if err := convertMinioError(obj.Err, true); err != nil {
174174
metricCallErrors.WithLabelValues("list").Inc()
175175
return nil, err
176176
}
@@ -207,14 +207,14 @@ func (b *Backend) Load(ctx context.Context, name string) ([]byte, error) {
207207
metricLastCallTimestamp.WithLabelValues("load").SetToCurrentTime()
208208

209209
obj, err := b.client.GetObject(ctx, b.opt.Bucket, name, minio.GetObjectOptions{})
210-
if err = convertMinioError(err); err != nil {
210+
if err = convertMinioError(err, false); err != nil {
211211
return nil, err
212212
} else if obj == nil {
213213
return nil, os.ErrNotExist
214214
}
215215

216216
p, err := io.ReadAll(obj)
217-
if err = convertMinioError(err); err != nil {
217+
if err = convertMinioError(err, false); err != nil {
218218
return nil, err
219219
}
220220
return p, nil
@@ -263,7 +263,7 @@ func (b *Backend) doDelete(ctx context.Context, name string) error {
263263
metricLastCallTimestamp.WithLabelValues("delete").SetToCurrentTime()
264264

265265
err := b.client.RemoveObject(ctx, b.opt.Bucket, name, minio.RemoveObjectOptions{})
266-
if err = convertMinioError(err); err != nil {
266+
if err = convertMinioError(err, false); err != nil {
267267
metricCallErrors.WithLabelValues("delete").Inc()
268268
}
269269
return err
@@ -366,7 +366,7 @@ func New(ctx context.Context, opt Options) (*Backend, error) {
366366

367367
err := client.MakeBucket(ctx, opt.Bucket, minio.MakeBucketOptions{Region: opt.Region})
368368
if err != nil {
369-
if err := convertMinioError(err); err != nil {
369+
if err := convertMinioError(err, false); err != nil {
370370
return nil, err
371371
}
372372
}
@@ -386,18 +386,18 @@ func New(ctx context.Context, opt Options) (*Backend, error) {
386386
// and turns it into a well known error when possible.
387387
// If error is not well known, it is returned as is.
388388
// If error is considered to be ignorable, nil is returned.
389-
func convertMinioError(err error) error {
389+
func convertMinioError(err error, isList bool) error {
390390
if err == nil {
391391
return nil
392392
}
393-
errResp := minio.ToErrorResponse(err)
394-
if errResp.StatusCode == 404 {
395-
return os.ErrNotExist
393+
errRes := minio.ToErrorResponse(err)
394+
if !isList && errRes.StatusCode == 404 {
395+
return fmt.Errorf("%w: %s", os.ErrNotExist, err.Error())
396396
}
397-
if errResp.Code != "BucketAlreadyOwnedByYou" {
398-
return err
397+
if errRes.Code == "BucketAlreadyOwnedByYou" {
398+
return nil
399399
}
400-
return nil
400+
return err
401401
}
402402

403403
// prependGlobalPrefix prepends the GlobalPrefix to the name/prefix

0 commit comments

Comments
 (0)