Update s3 checker to iterate through all objects pages (#1802)

This commit is contained in:
Jerry Ng
2023-01-09 05:46:20 +08:00
committed by GitHub
parent cc496afbf1
commit 92150d0500
+16 -17
View File
@@ -11,10 +11,6 @@ import (
"github.com/gomods/athens/pkg/observ"
)
const (
s3ErrorCodeNotFound = "NotFound"
)
// Exists implements the (./pkg/storage).Checker interface
// returning true if the module at version exists in storage
func (s *Storage) Exists(ctx context.Context, module, version string) (bool, error) {
@@ -26,22 +22,25 @@ func (s *Storage) Exists(ctx context.Context, module, version string) (bool, err
Bucket: aws.String(s.bucket),
Prefix: aws.String(fmt.Sprintf("%s/@v", module)),
}
var count int
err := s.s3API.ListObjectsPagesWithContext(ctx, lsParams, func(loo *s3.ListObjectsOutput, lastPage bool) bool {
for _, o := range loo.Contents {
// sane assumption: no duplicate keys.
switch *o.Key {
case config.PackageVersionedName(module, version, "info"):
count++
case config.PackageVersionedName(module, version, "mod"):
count++
case config.PackageVersionedName(module, version, "zip"):
count++
}
}
return count != 3
})
loo, err := s.s3API.ListObjectsWithContext(ctx, lsParams)
if err != nil {
return false, errors.E(op, err, errors.M(module), errors.V(version))
}
var count int
for _, o := range loo.Contents {
// sane assumption: no duplicate keys.
switch *o.Key {
case config.PackageVersionedName(module, version, "info"):
count++
case config.PackageVersionedName(module, version, "mod"):
count++
case config.PackageVersionedName(module, version, "zip"):
count++
}
}
return count == 3, nil
}