mirror of
https://github.com/project-zot/zot.git
synced 2026-06-16 04:17:55 +08:00
Fix problems signaled by new linter version v1.45.2
PR (linter: upgrade linter version #405) triggered lint job which failed with many errors generated by various linters. Configurations were added to golangcilint.yaml and several refactorings were made in order to improve the results of the linter. maintidx linter disabled Signed-off-by: Alex Stan <alexandrustan96@yahoo.ro>
This commit is contained in:
committed by
Ramkumar Chinchani
parent
d19a4bf2a1
commit
d325c8b5f4
@@ -27,7 +27,7 @@ type Blob struct {
|
||||
Path string
|
||||
}
|
||||
|
||||
func NewCache(rootDir string, name string, log zlog.Logger) *Cache {
|
||||
func NewCache(rootDir, name string, log zlog.Logger) *Cache {
|
||||
dbPath := path.Join(rootDir, name+".db")
|
||||
dbOpts := &bbolt.Options{
|
||||
Timeout: dbCacheLockCheckTimeout,
|
||||
@@ -60,7 +60,7 @@ func NewCache(rootDir string, name string, log zlog.Logger) *Cache {
|
||||
return &Cache{rootDir: rootDir, db: cacheDB, log: log}
|
||||
}
|
||||
|
||||
func (c *Cache) PutBlob(digest string, path string) error {
|
||||
func (c *Cache) PutBlob(digest, path string) error {
|
||||
if path == "" {
|
||||
c.log.Error().Err(errors.ErrEmptyValue).Str("digest", digest).Msg("empty path provided")
|
||||
|
||||
@@ -136,7 +136,7 @@ func (c *Cache) GetBlob(digest string) (string, error) {
|
||||
return blobPath.String(), nil
|
||||
}
|
||||
|
||||
func (c *Cache) HasBlob(digest string, blob string) bool {
|
||||
func (c *Cache) HasBlob(digest, blob string) bool {
|
||||
if err := c.db.View(func(tx *bbolt.Tx) error {
|
||||
root := tx.Bucket([]byte(BlobsCache))
|
||||
if root == nil {
|
||||
@@ -164,7 +164,7 @@ func (c *Cache) HasBlob(digest string, blob string) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (c *Cache) DeleteBlob(digest string, path string) error {
|
||||
func (c *Cache) DeleteBlob(digest, path string) error {
|
||||
// use only relative (to rootDir) paths on blobs
|
||||
relp, err := filepath.Rel(c.rootDir, path)
|
||||
if err != nil {
|
||||
|
||||
@@ -166,7 +166,7 @@ type StorageDriverMock struct {
|
||||
writerFn func(ctx context.Context, path string, isAppend bool) (driver.FileWriter, error)
|
||||
statFn func(ctx context.Context, path string) (driver.FileInfo, error)
|
||||
listFn func(ctx context.Context, path string) ([]string, error)
|
||||
moveFn func(ctx context.Context, sourcePath string, destPath string) error
|
||||
moveFn func(ctx context.Context, sourcePath, destPath string) error
|
||||
deleteFn func(ctx context.Context, path string) error
|
||||
walkFn func(ctx context.Context, path string, f driver.WalkFn) error
|
||||
}
|
||||
@@ -227,7 +227,7 @@ func (s *StorageDriverMock) List(ctx context.Context, path string) ([]string, er
|
||||
return []string{"a"}, nil
|
||||
}
|
||||
|
||||
func (s *StorageDriverMock) Move(ctx context.Context, sourcePath string, destPath string) error {
|
||||
func (s *StorageDriverMock) Move(ctx context.Context, sourcePath, destPath string) error {
|
||||
if s != nil && s.moveFn != nil {
|
||||
return s.moveFn(ctx, sourcePath, destPath)
|
||||
}
|
||||
|
||||
+26
-24
@@ -16,7 +16,6 @@ import (
|
||||
|
||||
// Add s3 support.
|
||||
"github.com/docker/distribution/registry/storage/driver"
|
||||
|
||||
// Load s3 driver.
|
||||
_ "github.com/docker/distribution/registry/storage/driver/s3-aws"
|
||||
guuid "github.com/gofrs/uuid"
|
||||
@@ -65,7 +64,8 @@ func (is *ObjectStorage) DirExists(d string) bool {
|
||||
// see https://github.com/docker/docker.github.io/tree/master/registry/storage-drivers
|
||||
func NewImageStore(rootDir string, gc bool, gcDelay time.Duration, dedupe, commit bool,
|
||||
log zlog.Logger, metrics monitoring.MetricServer,
|
||||
store driver.StorageDriver) storage.ImageStore {
|
||||
store driver.StorageDriver,
|
||||
) storage.ImageStore {
|
||||
imgStore := &ObjectStorage{
|
||||
rootDir: rootDir,
|
||||
store: store,
|
||||
@@ -307,7 +307,7 @@ func (is *ObjectStorage) GetImageTags(repo string) ([]string, error) {
|
||||
}
|
||||
|
||||
// GetImageManifest returns the image manifest of an image in the specific repository.
|
||||
func (is *ObjectStorage) GetImageManifest(repo string, reference string) ([]byte, string, string, error) {
|
||||
func (is *ObjectStorage) GetImageManifest(repo, reference string) ([]byte, string, string, error) {
|
||||
var lockLatency time.Time
|
||||
|
||||
dir := path.Join(is.rootDir, repo)
|
||||
@@ -381,8 +381,9 @@ func (is *ObjectStorage) GetImageManifest(repo string, reference string) ([]byte
|
||||
}
|
||||
|
||||
// PutImageManifest adds an image manifest to the repository.
|
||||
func (is *ObjectStorage) PutImageManifest(repo string, reference string, mediaType string,
|
||||
body []byte) (string, error) {
|
||||
func (is *ObjectStorage) PutImageManifest(repo, reference, mediaType string,
|
||||
body []byte,
|
||||
) (string, error) {
|
||||
if err := is.InitRepo(repo); err != nil {
|
||||
is.log.Debug().Err(err).Msg("init repo")
|
||||
|
||||
@@ -402,20 +403,20 @@ func (is *ObjectStorage) PutImageManifest(repo string, reference string, mediaTy
|
||||
return "", zerr.ErrBadManifest
|
||||
}
|
||||
|
||||
var m ispec.Manifest
|
||||
if err := json.Unmarshal(body, &m); err != nil {
|
||||
var imageManifest ispec.Manifest
|
||||
if err := json.Unmarshal(body, &imageManifest); err != nil {
|
||||
is.log.Error().Err(err).Msg("unable to unmarshal JSON")
|
||||
|
||||
return "", zerr.ErrBadManifest
|
||||
}
|
||||
|
||||
if m.SchemaVersion != storage.SchemaVersion {
|
||||
is.log.Error().Int("SchemaVersion", m.SchemaVersion).Msg("invalid manifest")
|
||||
if imageManifest.SchemaVersion != storage.SchemaVersion {
|
||||
is.log.Error().Int("SchemaVersion", imageManifest.SchemaVersion).Msg("invalid manifest")
|
||||
|
||||
return "", zerr.ErrBadManifest
|
||||
}
|
||||
|
||||
for _, l := range m.Layers {
|
||||
for _, l := range imageManifest.Layers {
|
||||
digest := l.Digest
|
||||
blobPath := is.BlobPath(repo, digest)
|
||||
is.log.Info().Str("blobPath", blobPath).Str("reference", reference).Msg("manifest layers")
|
||||
@@ -548,7 +549,7 @@ func (is *ObjectStorage) PutImageManifest(repo string, reference string, mediaTy
|
||||
}
|
||||
|
||||
// DeleteImageManifest deletes the image manifest from the repository.
|
||||
func (is *ObjectStorage) DeleteImageManifest(repo string, reference string) error {
|
||||
func (is *ObjectStorage) DeleteImageManifest(repo, reference string) error {
|
||||
var lockLatency time.Time
|
||||
|
||||
dir := path.Join(is.rootDir, repo)
|
||||
@@ -657,7 +658,7 @@ func (is *ObjectStorage) DeleteImageManifest(repo string, reference string) erro
|
||||
}
|
||||
|
||||
// BlobUploadPath returns the upload path for a blob in this store.
|
||||
func (is *ObjectStorage) BlobUploadPath(repo string, uuid string) string {
|
||||
func (is *ObjectStorage) BlobUploadPath(repo, uuid string) string {
|
||||
dir := path.Join(is.rootDir, repo)
|
||||
blobUploadPath := path.Join(dir, storage.BlobUploadDir, uuid)
|
||||
|
||||
@@ -692,7 +693,7 @@ func (is *ObjectStorage) NewBlobUpload(repo string) (string, error) {
|
||||
}
|
||||
|
||||
// GetBlobUpload returns the current size of a blob upload.
|
||||
func (is *ObjectStorage) GetBlobUpload(repo string, uuid string) (int64, error) {
|
||||
func (is *ObjectStorage) GetBlobUpload(repo, uuid string) (int64, error) {
|
||||
var fileSize int64
|
||||
|
||||
blobUploadPath := is.BlobUploadPath(repo, uuid)
|
||||
@@ -727,7 +728,7 @@ func (is *ObjectStorage) GetBlobUpload(repo string, uuid string) (int64, error)
|
||||
|
||||
// PutBlobChunkStreamed appends another chunk of data to the specified blob. It returns
|
||||
// the number of actual bytes to the blob.
|
||||
func (is *ObjectStorage) PutBlobChunkStreamed(repo string, uuid string, body io.Reader) (int64, error) {
|
||||
func (is *ObjectStorage) PutBlobChunkStreamed(repo, uuid string, body io.Reader) (int64, error) {
|
||||
if err := is.InitRepo(repo); err != nil {
|
||||
return -1, err
|
||||
}
|
||||
@@ -769,8 +770,9 @@ func (is *ObjectStorage) PutBlobChunkStreamed(repo string, uuid string, body io.
|
||||
|
||||
// PutBlobChunk writes another chunk of data to the specified blob. It returns
|
||||
// the number of actual bytes to the blob.
|
||||
func (is *ObjectStorage) PutBlobChunk(repo string, uuid string, from int64, to int64,
|
||||
body io.Reader) (int64, error) {
|
||||
func (is *ObjectStorage) PutBlobChunk(repo, uuid string, from, to int64,
|
||||
body io.Reader,
|
||||
) (int64, error) {
|
||||
if err := is.InitRepo(repo); err != nil {
|
||||
return -1, err
|
||||
}
|
||||
@@ -828,7 +830,7 @@ func (is *ObjectStorage) PutBlobChunk(repo string, uuid string, from int64, to i
|
||||
}
|
||||
|
||||
// BlobUploadInfo returns the current blob size in bytes.
|
||||
func (is *ObjectStorage) BlobUploadInfo(repo string, uuid string) (int64, error) {
|
||||
func (is *ObjectStorage) BlobUploadInfo(repo, uuid string) (int64, error) {
|
||||
var fileSize int64
|
||||
|
||||
blobUploadPath := is.BlobUploadPath(repo, uuid)
|
||||
@@ -861,7 +863,7 @@ func (is *ObjectStorage) BlobUploadInfo(repo string, uuid string) (int64, error)
|
||||
}
|
||||
|
||||
// FinishBlobUpload finalizes the blob upload and moves blob the repository.
|
||||
func (is *ObjectStorage) FinishBlobUpload(repo string, uuid string, body io.Reader, digest string) error {
|
||||
func (is *ObjectStorage) FinishBlobUpload(repo, uuid string, body io.Reader, digest string) error {
|
||||
dstDigest, err := godigest.Parse(digest)
|
||||
if err != nil {
|
||||
is.log.Error().Err(err).Str("digest", digest).Msg("failed to parse digest")
|
||||
@@ -1010,7 +1012,7 @@ func (is *ObjectStorage) RunGCPeriodically(gcInterval time.Duration) {
|
||||
}
|
||||
|
||||
// DeleteBlobUpload deletes an existing blob upload that is currently in progress.
|
||||
func (is *ObjectStorage) DeleteBlobUpload(repo string, uuid string) error {
|
||||
func (is *ObjectStorage) DeleteBlobUpload(repo, uuid string) error {
|
||||
blobUploadPath := is.BlobUploadPath(repo, uuid)
|
||||
if err := is.store.Delete(context.Background(), blobUploadPath); err != nil {
|
||||
is.log.Error().Err(err).Str("blobUploadPath", blobUploadPath).Msg("error deleting blob upload")
|
||||
@@ -1027,7 +1029,7 @@ func (is *ObjectStorage) BlobPath(repo string, digest godigest.Digest) string {
|
||||
}
|
||||
|
||||
// CheckBlob verifies a blob and returns true if the blob is correct.
|
||||
func (is *ObjectStorage) CheckBlob(repo string, digest string) (bool, int64, error) {
|
||||
func (is *ObjectStorage) CheckBlob(repo, digest string) (bool, int64, error) {
|
||||
var lockLatency time.Time
|
||||
|
||||
dgst, err := godigest.Parse(digest)
|
||||
@@ -1061,7 +1063,7 @@ func (is *ObjectStorage) CheckBlob(repo string, digest string) (bool, int64, err
|
||||
|
||||
// GetBlob returns a stream to read the blob.
|
||||
// blob selector instead of directly downloading the blob.
|
||||
func (is *ObjectStorage) GetBlob(repo string, digest string, mediaType string) (io.Reader, int64, error) {
|
||||
func (is *ObjectStorage) GetBlob(repo, digest, mediaType string) (io.Reader, int64, error) {
|
||||
var lockLatency time.Time
|
||||
|
||||
dgst, err := godigest.Parse(digest)
|
||||
@@ -1093,7 +1095,7 @@ func (is *ObjectStorage) GetBlob(repo string, digest string, mediaType string) (
|
||||
return blobReader, binfo.Size(), nil
|
||||
}
|
||||
|
||||
func (is *ObjectStorage) GetBlobContent(repo string, digest string) ([]byte, error) {
|
||||
func (is *ObjectStorage) GetBlobContent(repo, digest string) ([]byte, error) {
|
||||
blob, _, err := is.GetBlob(repo, digest, ispec.MediaTypeImageManifest)
|
||||
if err != nil {
|
||||
return []byte{}, err
|
||||
@@ -1111,7 +1113,7 @@ func (is *ObjectStorage) GetBlobContent(repo string, digest string) ([]byte, err
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func (is *ObjectStorage) GetReferrers(repo, digest string, mediaType string) ([]artifactspec.Descriptor, error) {
|
||||
func (is *ObjectStorage) GetReferrers(repo, digest, mediaType string) ([]artifactspec.Descriptor, error) {
|
||||
return nil, zerr.ErrMethodNotSupported
|
||||
}
|
||||
|
||||
@@ -1134,7 +1136,7 @@ func (is *ObjectStorage) GetIndexContent(repo string) ([]byte, error) {
|
||||
}
|
||||
|
||||
// DeleteBlob removes the blob from the repository.
|
||||
func (is *ObjectStorage) DeleteBlob(repo string, digest string) error {
|
||||
func (is *ObjectStorage) DeleteBlob(repo, digest string) error {
|
||||
var lockLatency time.Time
|
||||
|
||||
dgst, err := godigest.Parse(digest)
|
||||
|
||||
@@ -126,8 +126,7 @@ func checkRepo(imageName string, imgStore ImageStore) ([]ScrubImageResult, error
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func checkIntegrity(ctx context.Context, imageName, tagName string, oci casext.Engine, manifest ispec.Descriptor,
|
||||
dir string) ScrubImageResult {
|
||||
func checkIntegrity(ctx context.Context, imageName, tagName string, oci casext.Engine, manifest ispec.Descriptor, dir string) ScrubImageResult { // nolint: lll
|
||||
// check manifest and config
|
||||
stat, err := umoci.Stat(ctx, oci, manifest)
|
||||
|
||||
|
||||
@@ -117,7 +117,8 @@ func TestCheckAllBlobsIntegrity(t *testing.T) {
|
||||
}
|
||||
|
||||
mnfst.SchemaVersion = 2
|
||||
mb, _ := json.Marshal(mnfst)
|
||||
mb, err := json.Marshal(mnfst)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
manifest, err = imgStore.PutImageManifest(repoName, tag, ispec.MediaTypeImageManifest, mb)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
+13
-13
@@ -24,23 +24,23 @@ type ImageStore interface {
|
||||
ValidateRepo(name string) (bool, error)
|
||||
GetRepositories() ([]string, error)
|
||||
GetImageTags(repo string) ([]string, error)
|
||||
GetImageManifest(repo string, reference string) ([]byte, string, string, error)
|
||||
PutImageManifest(repo string, reference string, mediaType string, body []byte) (string, error)
|
||||
DeleteImageManifest(repo string, reference string) error
|
||||
BlobUploadPath(repo string, uuid string) string
|
||||
GetImageManifest(repo, reference string) ([]byte, string, string, error)
|
||||
PutImageManifest(repo, reference, mediaType string, body []byte) (string, error)
|
||||
DeleteImageManifest(repo, reference string) error
|
||||
BlobUploadPath(repo, uuid string) string
|
||||
NewBlobUpload(repo string) (string, error)
|
||||
GetBlobUpload(repo string, uuid string) (int64, error)
|
||||
PutBlobChunkStreamed(repo string, uuid string, body io.Reader) (int64, error)
|
||||
PutBlobChunk(repo string, uuid string, from int64, to int64, body io.Reader) (int64, error)
|
||||
BlobUploadInfo(repo string, uuid string) (int64, error)
|
||||
FinishBlobUpload(repo string, uuid string, body io.Reader, digest string) error
|
||||
GetBlobUpload(repo, uuid string) (int64, error)
|
||||
PutBlobChunkStreamed(repo, uuid string, body io.Reader) (int64, error)
|
||||
PutBlobChunk(repo, uuid string, from, to int64, body io.Reader) (int64, error)
|
||||
BlobUploadInfo(repo, uuid string) (int64, error)
|
||||
FinishBlobUpload(repo, uuid string, body io.Reader, digest string) error
|
||||
FullBlobUpload(repo string, body io.Reader, digest string) (string, int64, error)
|
||||
DedupeBlob(src string, dstDigest digest.Digest, dst string) error
|
||||
DeleteBlobUpload(repo string, uuid string) error
|
||||
DeleteBlobUpload(repo, uuid string) error
|
||||
BlobPath(repo string, digest digest.Digest) string
|
||||
CheckBlob(repo string, digest string) (bool, int64, error)
|
||||
GetBlob(repo string, digest string, mediaType string) (io.Reader, int64, error)
|
||||
DeleteBlob(repo string, digest string) error
|
||||
CheckBlob(repo, digest string) (bool, int64, error)
|
||||
GetBlob(repo, digest, mediaType string) (io.Reader, int64, error)
|
||||
DeleteBlob(repo, digest string) error
|
||||
GetIndexContent(repo string) ([]byte, error)
|
||||
GetBlobContent(repo, digest string) ([]byte, error)
|
||||
GetReferrers(repo, digest string, mediaType string) ([]artifactspec.Descriptor, error)
|
||||
|
||||
+24
-21
@@ -106,7 +106,8 @@ func (sc StoreController) GetImageStore(name string) ImageStore {
|
||||
|
||||
// NewImageStore returns a new image store backed by a file storage.
|
||||
func NewImageStore(rootDir string, gc bool, gcDelay time.Duration, dedupe, commit bool,
|
||||
log zlog.Logger, metrics monitoring.MetricServer) ImageStore {
|
||||
log zlog.Logger, metrics monitoring.MetricServer,
|
||||
) ImageStore {
|
||||
if _, err := os.Stat(rootDir); os.IsNotExist(err) {
|
||||
if err := os.MkdirAll(rootDir, DefaultDirPerms); err != nil {
|
||||
log.Error().Err(err).Str("rootDir", rootDir).Msg("unable to create root dir")
|
||||
@@ -387,7 +388,7 @@ func (is *ImageStoreFS) GetImageTags(repo string) ([]string, error) {
|
||||
}
|
||||
|
||||
// GetImageManifest returns the image manifest of an image in the specific repository.
|
||||
func (is *ImageStoreFS) GetImageManifest(repo string, reference string) ([]byte, string, string, error) {
|
||||
func (is *ImageStoreFS) GetImageManifest(repo, reference string) ([]byte, string, string, error) {
|
||||
var lockLatency time.Time
|
||||
|
||||
dir := path.Join(is.rootDir, repo)
|
||||
@@ -471,7 +472,7 @@ func (is *ImageStoreFS) GetImageManifest(repo string, reference string) ([]byte,
|
||||
return buf, digest.String(), mediaType, nil
|
||||
}
|
||||
|
||||
func (is *ImageStoreFS) validateOCIManifest(repo string, reference string, manifest *ispec.Manifest) (string, error) {
|
||||
func (is *ImageStoreFS) validateOCIManifest(repo, reference string, manifest *ispec.Manifest) (string, error) {
|
||||
if manifest.SchemaVersion != SchemaVersion {
|
||||
is.log.Error().Int("SchemaVersion", manifest.SchemaVersion).Msg("invalid manifest")
|
||||
|
||||
@@ -526,8 +527,9 @@ func (is *ImageStoreFS) validateOCIManifest(repo string, reference string, manif
|
||||
}
|
||||
|
||||
// PutImageManifest adds an image manifest to the repository.
|
||||
func (is *ImageStoreFS) PutImageManifest(repo string, reference string, mediaType string,
|
||||
body []byte) (string, error) {
|
||||
func (is *ImageStoreFS) PutImageManifest(repo, reference, mediaType string,
|
||||
body []byte,
|
||||
) (string, error) {
|
||||
if err := is.InitRepo(repo); err != nil {
|
||||
is.log.Debug().Err(err).Msg("init repo")
|
||||
|
||||
@@ -703,7 +705,7 @@ func (is *ImageStoreFS) PutImageManifest(repo string, reference string, mediaTyp
|
||||
}
|
||||
|
||||
// DeleteImageManifest deletes the image manifest from the repository.
|
||||
func (is *ImageStoreFS) DeleteImageManifest(repo string, reference string) error {
|
||||
func (is *ImageStoreFS) DeleteImageManifest(repo, reference string) error {
|
||||
var lockLatency time.Time
|
||||
|
||||
dir := path.Join(is.rootDir, repo)
|
||||
@@ -815,7 +817,7 @@ func (is *ImageStoreFS) DeleteImageManifest(repo string, reference string) error
|
||||
}
|
||||
|
||||
// BlobUploadPath returns the upload path for a blob in this store.
|
||||
func (is *ImageStoreFS) BlobUploadPath(repo string, uuid string) string {
|
||||
func (is *ImageStoreFS) BlobUploadPath(repo, uuid string) string {
|
||||
dir := path.Join(is.rootDir, repo)
|
||||
blobUploadPath := path.Join(dir, BlobUploadDir, uuid)
|
||||
|
||||
@@ -849,7 +851,7 @@ func (is *ImageStoreFS) NewBlobUpload(repo string) (string, error) {
|
||||
}
|
||||
|
||||
// GetBlobUpload returns the current size of a blob upload.
|
||||
func (is *ImageStoreFS) GetBlobUpload(repo string, uuid string) (int64, error) {
|
||||
func (is *ImageStoreFS) GetBlobUpload(repo, uuid string) (int64, error) {
|
||||
blobUploadPath := is.BlobUploadPath(repo, uuid)
|
||||
|
||||
binfo, err := os.Stat(blobUploadPath)
|
||||
@@ -866,7 +868,7 @@ func (is *ImageStoreFS) GetBlobUpload(repo string, uuid string) (int64, error) {
|
||||
|
||||
// PutBlobChunkStreamed appends another chunk of data to the specified blob. It returns
|
||||
// the number of actual bytes to the blob.
|
||||
func (is *ImageStoreFS) PutBlobChunkStreamed(repo string, uuid string, body io.Reader) (int64, error) {
|
||||
func (is *ImageStoreFS) PutBlobChunkStreamed(repo, uuid string, body io.Reader) (int64, error) {
|
||||
if err := is.InitRepo(repo); err != nil {
|
||||
return -1, err
|
||||
}
|
||||
@@ -906,8 +908,9 @@ func (is *ImageStoreFS) PutBlobChunkStreamed(repo string, uuid string, body io.R
|
||||
|
||||
// PutBlobChunk writes another chunk of data to the specified blob. It returns
|
||||
// the number of actual bytes to the blob.
|
||||
func (is *ImageStoreFS) PutBlobChunk(repo string, uuid string, from int64, to int64,
|
||||
body io.Reader) (int64, error) {
|
||||
func (is *ImageStoreFS) PutBlobChunk(repo, uuid string, from, to int64,
|
||||
body io.Reader,
|
||||
) (int64, error) {
|
||||
if err := is.InitRepo(repo); err != nil {
|
||||
return -1, err
|
||||
}
|
||||
@@ -953,7 +956,7 @@ func (is *ImageStoreFS) PutBlobChunk(repo string, uuid string, from int64, to in
|
||||
}
|
||||
|
||||
// BlobUploadInfo returns the current blob size in bytes.
|
||||
func (is *ImageStoreFS) BlobUploadInfo(repo string, uuid string) (int64, error) {
|
||||
func (is *ImageStoreFS) BlobUploadInfo(repo, uuid string) (int64, error) {
|
||||
blobUploadPath := is.BlobUploadPath(repo, uuid)
|
||||
|
||||
binfo, err := os.Stat(blobUploadPath)
|
||||
@@ -969,7 +972,7 @@ func (is *ImageStoreFS) BlobUploadInfo(repo string, uuid string) (int64, error)
|
||||
}
|
||||
|
||||
// FinishBlobUpload finalizes the blob upload and moves blob the repository.
|
||||
func (is *ImageStoreFS) FinishBlobUpload(repo string, uuid string, body io.Reader, digest string) error {
|
||||
func (is *ImageStoreFS) FinishBlobUpload(repo, uuid string, body io.Reader, digest string) error {
|
||||
dstDigest, err := godigest.Parse(digest)
|
||||
if err != nil {
|
||||
is.log.Error().Err(err).Str("digest", digest).Msg("failed to parse digest")
|
||||
@@ -1169,7 +1172,7 @@ retry:
|
||||
is.log.Error().Err(err).Str("blobPath", dstRecord).Msg("dedupe: unable to stat")
|
||||
// the actual blob on disk may have been removed by GC, so sync the cache
|
||||
if err := is.cache.DeleteBlob(dstDigest.String(), dstRecord); err != nil {
|
||||
// nolint:lll
|
||||
//nolint:lll // gofumpt conflicts with lll
|
||||
is.log.Error().Err(err).Str("dstDigest", dstDigest.String()).Str("dst", dst).Msg("dedupe: unable to delete blob record")
|
||||
|
||||
return err
|
||||
@@ -1215,7 +1218,7 @@ retry:
|
||||
}
|
||||
|
||||
// DeleteBlobUpload deletes an existing blob upload that is currently in progress.
|
||||
func (is *ImageStoreFS) DeleteBlobUpload(repo string, uuid string) error {
|
||||
func (is *ImageStoreFS) DeleteBlobUpload(repo, uuid string) error {
|
||||
blobUploadPath := is.BlobUploadPath(repo, uuid)
|
||||
if err := os.Remove(blobUploadPath); err != nil {
|
||||
is.log.Error().Err(err).Str("blobUploadPath", blobUploadPath).Msg("error deleting blob upload")
|
||||
@@ -1232,7 +1235,7 @@ func (is *ImageStoreFS) BlobPath(repo string, digest godigest.Digest) string {
|
||||
}
|
||||
|
||||
// CheckBlob verifies a blob and returns true if the blob is correct.
|
||||
func (is *ImageStoreFS) CheckBlob(repo string, digest string) (bool, int64, error) {
|
||||
func (is *ImageStoreFS) CheckBlob(repo, digest string) (bool, int64, error) {
|
||||
var lockLatency time.Time
|
||||
|
||||
parsedDigest, err := godigest.Parse(digest)
|
||||
@@ -1301,7 +1304,7 @@ func (is *ImageStoreFS) checkCacheBlob(digest string) (string, error) {
|
||||
return dstRecord, nil
|
||||
}
|
||||
|
||||
func (is *ImageStoreFS) copyBlob(repo string, blobPath string, dstRecord string) (int64, error) {
|
||||
func (is *ImageStoreFS) copyBlob(repo, blobPath, dstRecord string) (int64, error) {
|
||||
if err := is.initRepo(repo); err != nil {
|
||||
is.log.Error().Err(err).Str("repo", repo).Msg("unable to initialize an empty repo")
|
||||
|
||||
@@ -1326,7 +1329,7 @@ func (is *ImageStoreFS) copyBlob(repo string, blobPath string, dstRecord string)
|
||||
|
||||
// GetBlob returns a stream to read the blob.
|
||||
// blob selector instead of directly downloading the blob.
|
||||
func (is *ImageStoreFS) GetBlob(repo string, digest string, mediaType string) (io.Reader, int64, error) {
|
||||
func (is *ImageStoreFS) GetBlob(repo, digest, mediaType string) (io.Reader, int64, error) {
|
||||
var lockLatency time.Time
|
||||
|
||||
parsedDigest, err := godigest.Parse(digest)
|
||||
@@ -1358,7 +1361,7 @@ func (is *ImageStoreFS) GetBlob(repo string, digest string, mediaType string) (i
|
||||
return blobReader, binfo.Size(), nil
|
||||
}
|
||||
|
||||
func (is *ImageStoreFS) GetBlobContent(repo string, digest string) ([]byte, error) {
|
||||
func (is *ImageStoreFS) GetBlobContent(repo, digest string) ([]byte, error) {
|
||||
blob, _, err := is.GetBlob(repo, digest, ispec.MediaTypeImageManifest)
|
||||
if err != nil {
|
||||
return []byte{}, err
|
||||
@@ -1401,7 +1404,7 @@ func (is *ImageStoreFS) GetIndexContent(repo string) ([]byte, error) {
|
||||
}
|
||||
|
||||
// DeleteBlob removes the blob from the repository.
|
||||
func (is *ImageStoreFS) DeleteBlob(repo string, digest string) error {
|
||||
func (is *ImageStoreFS) DeleteBlob(repo, digest string) error {
|
||||
var lockLatency time.Time
|
||||
|
||||
dgst, err := godigest.Parse(digest)
|
||||
@@ -1440,7 +1443,7 @@ func (is *ImageStoreFS) DeleteBlob(repo string, digest string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (is *ImageStoreFS) GetReferrers(repo, digest string, mediaType string) ([]artifactspec.Descriptor, error) {
|
||||
func (is *ImageStoreFS) GetReferrers(repo, digest, mediaType string) ([]artifactspec.Descriptor, error) {
|
||||
var lockLatency time.Time
|
||||
|
||||
dir := path.Join(is.rootDir, repo)
|
||||
|
||||
@@ -84,7 +84,8 @@ func TestStorageFSAPIs(t *testing.T) {
|
||||
}
|
||||
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ := json.Marshal(manifest)
|
||||
manifestBuf, err := json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
digest = godigest.FromBytes(manifestBuf)
|
||||
|
||||
err = os.Chmod(path.Join(imgStore.RootDir(), repoName, "index.json"), 0o000)
|
||||
@@ -217,7 +218,8 @@ func TestDedupeLinks(t *testing.T) {
|
||||
},
|
||||
}
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ := json.Marshal(manifest)
|
||||
manifestBuf, err := json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
digest = godigest.FromBytes(manifestBuf)
|
||||
_, err = imgStore.PutImageManifest("dedupe1", digest.String(), ispec.MediaTypeImageManifest, manifestBuf)
|
||||
So(err, ShouldBeNil)
|
||||
@@ -273,7 +275,8 @@ func TestDedupeLinks(t *testing.T) {
|
||||
},
|
||||
}
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ = json.Marshal(manifest)
|
||||
manifestBuf, err = json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
digest = godigest.FromBytes(manifestBuf)
|
||||
_, err = imgStore.PutImageManifest("dedupe2", "1.0", ispec.MediaTypeImageManifest, manifestBuf)
|
||||
So(err, ShouldBeNil)
|
||||
@@ -779,7 +782,8 @@ func TestGarbageCollect(t *testing.T) {
|
||||
}
|
||||
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ := json.Marshal(manifest)
|
||||
manifestBuf, err := json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
digest := godigest.FromBytes(manifestBuf)
|
||||
|
||||
_, err = imgStore.PutImageManifest(repoName, tag, ispec.MediaTypeImageManifest, manifestBuf)
|
||||
@@ -866,7 +870,8 @@ func TestGarbageCollect(t *testing.T) {
|
||||
}
|
||||
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ := json.Marshal(manifest)
|
||||
manifestBuf, err := json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
digest := godigest.FromBytes(manifestBuf)
|
||||
|
||||
_, err = imgStore.PutImageManifest(repoName, tag, ispec.MediaTypeImageManifest, manifestBuf)
|
||||
@@ -945,7 +950,8 @@ func TestGarbageCollect(t *testing.T) {
|
||||
}
|
||||
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ := json.Marshal(manifest)
|
||||
manifestBuf, err := json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
_, err = imgStore.PutImageManifest(repo1Name, tag, ispec.MediaTypeImageManifest, manifestBuf)
|
||||
So(err, ShouldBeNil)
|
||||
@@ -1007,7 +1013,8 @@ func TestGarbageCollect(t *testing.T) {
|
||||
}
|
||||
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ = json.Marshal(manifest)
|
||||
manifestBuf, err = json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
_, err = imgStore.PutImageManifest(repo2Name, tag, ispec.MediaTypeImageManifest, manifestBuf)
|
||||
So(err, ShouldBeNil)
|
||||
@@ -1062,7 +1069,8 @@ func TestGarbageCollect(t *testing.T) {
|
||||
}
|
||||
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ = json.Marshal(manifest)
|
||||
manifestBuf, err = json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
digest := godigest.FromBytes(manifestBuf)
|
||||
|
||||
_, err = imgStore.PutImageManifest(repo2Name, tag, ispec.MediaTypeImageManifest, manifestBuf)
|
||||
|
||||
@@ -235,7 +235,8 @@ func TestStorageAPIs(t *testing.T) {
|
||||
|
||||
manifest := ispec.Manifest{}
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ := json.Marshal(manifest)
|
||||
manifestBuf, err := json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
Convey("Bad image manifest", func() {
|
||||
_, err = imgStore.PutImageManifest("test", digest.String(), "application/json",
|
||||
@@ -289,12 +290,14 @@ func TestStorageAPIs(t *testing.T) {
|
||||
}
|
||||
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ = json.Marshal(manifest)
|
||||
manifestBuf, err = json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
digest := godigest.FromBytes(manifestBuf)
|
||||
|
||||
// bad manifest
|
||||
manifest.Layers[0].Digest = godigest.FromBytes([]byte("inexistent"))
|
||||
badMb, _ := json.Marshal(manifest)
|
||||
badMb, err := json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
_, err = imgStore.PutImageManifest("test", "1.0", ispec.MediaTypeImageManifest, badMb)
|
||||
So(err, ShouldNotBeNil)
|
||||
@@ -428,7 +431,8 @@ func TestStorageAPIs(t *testing.T) {
|
||||
|
||||
manifest := ispec.Manifest{}
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ := json.Marshal(manifest)
|
||||
manifestBuf, err := json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
Convey("Bad digests", func() {
|
||||
_, _, err := imgStore.FullBlobUpload("test", bytes.NewBuffer([]byte{}), "inexistent")
|
||||
@@ -473,7 +477,8 @@ func TestStorageAPIs(t *testing.T) {
|
||||
},
|
||||
}
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ = json.Marshal(manifest)
|
||||
manifestBuf, err = json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
digest := godigest.FromBytes(manifestBuf)
|
||||
_, err = imgStore.PutImageManifest("test", digest.String(), ispec.MediaTypeImageManifest, manifestBuf)
|
||||
So(err, ShouldBeNil)
|
||||
@@ -567,7 +572,9 @@ func TestStorageAPIs(t *testing.T) {
|
||||
},
|
||||
}
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ := json.Marshal(manifest)
|
||||
manifestBuf, err := json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
digest = godigest.FromBytes(manifestBuf)
|
||||
_, err = imgStore.PutImageManifest("replace", "1.0", ispec.MediaTypeImageManifest, manifestBuf)
|
||||
So(err, ShouldBeNil)
|
||||
@@ -617,7 +624,8 @@ func TestStorageAPIs(t *testing.T) {
|
||||
},
|
||||
}
|
||||
manifest.SchemaVersion = 2
|
||||
manifestBuf, _ = json.Marshal(manifest)
|
||||
manifestBuf, err = json.Marshal(manifest)
|
||||
So(err, ShouldBeNil)
|
||||
_ = godigest.FromBytes(manifestBuf)
|
||||
_, err = imgStore.PutImageManifest("replace", "1.0", ispec.MediaTypeImageManifest, manifestBuf)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
Reference in New Issue
Block a user