From b42159864789613883ed6ade0f162619c46d30a9 Mon Sep 17 00:00:00 2001 From: Ben McClelland Date: Wed, 31 Jul 2024 09:58:03 -0700 Subject: [PATCH] fix: allow objecting listing in scoutfs for files created without etag attrs Files created outside of versitygw can be missing etag attributes. Allow the empty etag to not cause errors with listing the files. Fixes #694 --- backend/scoutfs/scoutfs.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/scoutfs/scoutfs.go b/backend/scoutfs/scoutfs.go index b3a3a8a..0c6255d 100644 --- a/backend/scoutfs/scoutfs.go +++ b/backend/scoutfs/scoutfs.go @@ -821,11 +821,14 @@ func (s *ScoutFS) fileToObj(bucket string) backend.GetObjFunc { if d.IsDir() { // directory object only happens if directory empty // check to see if this is a directory object by checking etag - b, err := s.meta.RetrieveAttribute(bucket, path, etagkey) + etagBytes, err := s.meta.RetrieveAttribute(bucket, path, etagkey) + if errors.Is(err, meta.ErrNoSuchKey) || errors.Is(err, fs.ErrNotExist) { + return types.Object{}, backend.ErrSkipObj + } if err != nil { return types.Object{}, fmt.Errorf("get etag: %w", err) } - etag := string(b) + etag := string(etagBytes) fi, err := d.Info() if errors.Is(err, fs.ErrNotExist) { @@ -841,6 +844,7 @@ func (s *ScoutFS) fileToObj(bucket string) backend.GetObjFunc { ETag: &etag, Key: &key, LastModified: backend.GetTimePtr(fi.ModTime()), + StorageClass: types.ObjectStorageClassStandard, }, nil } @@ -849,9 +853,12 @@ func (s *ScoutFS) fileToObj(bucket string) backend.GetObjFunc { if errors.Is(err, fs.ErrNotExist) { return types.Object{}, backend.ErrSkipObj } - if err != nil { + if err != nil && !errors.Is(err, meta.ErrNoSuchKey) { return types.Object{}, fmt.Errorf("get etag: %w", err) } + // note: meta.ErrNoSuchKey will return etagBytes = []byte{} + // so this will just set etag to "" if its not already set + etag := string(b) fi, err := d.Info()