diff --git a/pkg/storage/minio/checker.go b/pkg/storage/minio/checker.go index 1cb17937..c555a248 100644 --- a/pkg/storage/minio/checker.go +++ b/pkg/storage/minio/checker.go @@ -6,7 +6,6 @@ import ( "github.com/gomods/athens/pkg/errors" "github.com/gomods/athens/pkg/observ" - minio "github.com/minio/minio-go" ) const ( @@ -19,15 +18,28 @@ func (v *storageImpl) Exists(ctx context.Context, module, version string) (bool, defer span.End() versionedPath := v.versionLocation(module, version) modPath := fmt.Sprintf("%s/go.mod", versionedPath) - _, err := v.minioClient.StatObject(v.bucketName, modPath, minio.StatObjectOptions{}) - - if minio.ToErrorResponse(err).Code == minioErrorCodeNoSuchKey { - return false, nil - } + infoPath := fmt.Sprintf("%s/%s.info", versionedPath, version) + zipPath := fmt.Sprintf("%s/source.zip", versionedPath) + var count int + objectCh, err := v.minioCore.ListObjectsV2(v.bucketName, versionedPath, "", false, "", 0, "") if err != nil { return false, errors.E(op, err, errors.M(module), errors.V(version)) } + for _, object := range objectCh.Contents { + if object.Err != nil { + return false, errors.E(op, object.Err, errors.M(module), errors.V(version)) + } - return true, nil + switch object.Key { + case infoPath: + count++ + case modPath: + count++ + case zipPath: + count++ + } + } + + return count == 3, nil } diff --git a/pkg/storage/minio/lister.go b/pkg/storage/minio/lister.go index 5af3554a..08a6e0ed 100644 --- a/pkg/storage/minio/lister.go +++ b/pkg/storage/minio/lister.go @@ -18,8 +18,11 @@ func (l *storageImpl) List(ctx context.Context, module string) ([]string, error) doneCh := make(chan struct{}) defer close(doneCh) searchPrefix := module + "/" - objectCh, _ := l.minioCore.ListObjectsV2(l.bucketName, searchPrefix, "", false, "", 0, "") + objectCh, err := l.minioCore.ListObjectsV2(l.bucketName, searchPrefix, "", false, "", 0, "") + if err != nil { + return nil, errors.E(op, err, errors.M(module)) + } for _, object := range objectCh.Contents { if object.Err != nil { return nil, errors.E(op, object.Err, errors.M(module))