gcs: check if all files exist (#1274)

This commit is contained in:
marpio
2019-06-06 21:47:50 +02:00
committed by Marwan Sulaiman
parent 3f535524c7
commit 91d7c47ba5
+20 -8
View File
@@ -7,6 +7,7 @@ import (
"github.com/gomods/athens/pkg/config"
"github.com/gomods/athens/pkg/errors"
"github.com/gomods/athens/pkg/observ"
"google.golang.org/api/iterator"
)
// Exists implements the (./pkg/storage).Checker interface
@@ -15,15 +16,26 @@ func (s *Storage) Exists(ctx context.Context, module, version string) (bool, err
const op errors.Op = "gcp.Exists"
ctx, span := observ.StartSpan(ctx, op.String())
defer span.End()
_, err := s.bucket.Object(config.PackageVersionedName(module, version, "mod")).Attrs(ctx)
if err == storage.ErrObjectNotExist {
return false, nil
it := s.bucket.Objects(ctx, &storage.Query{Prefix: config.PackageVersionedName(module, version, "")})
var count int
for {
attrs, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
return false, errors.E(op, err, errors.M(module), errors.V(version))
}
switch attrs.Name {
case config.PackageVersionedName(module, version, "info"):
count++
case config.PackageVersionedName(module, version, "mod"):
count++
case config.PackageVersionedName(module, version, "zip"):
count++
}
}
if err != nil {
return false, errors.E(op, err, errors.M(module), errors.V(version))
}
return true, nil
return count == 3, nil
}