zotregistry.io/zot@v1.4.4-0.20231124084042-02a8ed785457/pkg/storage/types/types.go (about) 1 package types 2 3 import ( 4 "context" 5 "io" 6 "time" 7 8 storagedriver "github.com/docker/distribution/registry/storage/driver" 9 godigest "github.com/opencontainers/go-digest" 10 ispec "github.com/opencontainers/image-spec/specs-go/v1" 11 artifactspec "github.com/oras-project/artifacts-spec/specs-go/v1" 12 13 "zotregistry.io/zot/pkg/scheduler" 14 ) 15 16 type StoreController interface { 17 GetImageStore(name string) ImageStore 18 GetDefaultImageStore() ImageStore 19 GetImageSubStores() map[string]ImageStore 20 } 21 22 type ImageStore interface { //nolint:interfacebloat 23 Name() string 24 DirExists(d string) bool 25 RootDir() string 26 RLock(*time.Time) 27 RUnlock(*time.Time) 28 Lock(*time.Time) 29 Unlock(*time.Time) 30 InitRepo(name string) error 31 ValidateRepo(name string) (bool, error) 32 GetRepositories() ([]string, error) 33 GetNextRepository(repo string) (string, error) 34 GetImageTags(repo string) ([]string, error) 35 GetImageManifest(repo, reference string) ([]byte, godigest.Digest, string, error) 36 PutImageManifest(repo, reference, mediaType string, body []byte) (godigest.Digest, godigest.Digest, error) 37 DeleteImageManifest(repo, reference string, detectCollision bool) error 38 BlobUploadPath(repo, uuid string) string 39 NewBlobUpload(repo string) (string, error) 40 GetBlobUpload(repo, uuid string) (int64, error) 41 PutBlobChunkStreamed(repo, uuid string, body io.Reader) (int64, error) 42 PutBlobChunk(repo, uuid string, from, to int64, body io.Reader) (int64, error) 43 BlobUploadInfo(repo, uuid string) (int64, error) 44 FinishBlobUpload(repo, uuid string, body io.Reader, digest godigest.Digest) error 45 FullBlobUpload(repo string, body io.Reader, digest godigest.Digest) (string, int64, error) 46 DedupeBlob(src string, dstDigest godigest.Digest, dstRepo, dst string) error 47 DeleteBlobUpload(repo, uuid string) error 48 BlobPath(repo string, digest godigest.Digest) string 49 CheckBlob(repo string, digest godigest.Digest) (bool, int64, error) 50 StatBlob(repo string, digest godigest.Digest) (bool, int64, time.Time, error) 51 GetBlob(repo string, digest godigest.Digest, mediaType string) (io.ReadCloser, int64, error) 52 GetBlobPartial(repo string, digest godigest.Digest, mediaType string, from, to int64, 53 ) (io.ReadCloser, int64, int64, error) 54 DeleteBlob(repo string, digest godigest.Digest) error 55 CleanupRepo(repo string, blobs []godigest.Digest, removeRepo bool) (int, error) 56 GetIndexContent(repo string) ([]byte, error) 57 PutIndexContent(repo string, index ispec.Index) error 58 StatIndex(repo string) (bool, int64, time.Time, error) 59 GetBlobContent(repo string, digest godigest.Digest) ([]byte, error) 60 GetReferrers(repo string, digest godigest.Digest, artifactTypes []string) (ispec.Index, error) 61 GetOrasReferrers(repo string, digest godigest.Digest, artifactType string) ([]artifactspec.Descriptor, error) 62 RunDedupeBlobs(interval time.Duration, sch *scheduler.Scheduler) 63 RunDedupeForDigest(ctx context.Context, digest godigest.Digest, dedupe bool, duplicateBlobs []string) error 64 GetNextDigestWithBlobPaths(repos []string, lastDigests []godigest.Digest) (godigest.Digest, []string, error) 65 GetAllBlobs(repo string) ([]string, error) 66 PopulateStorageMetrics(interval time.Duration, sch *scheduler.Scheduler) 67 } 68 69 type Driver interface { //nolint:interfacebloat 70 Name() string 71 EnsureDir(path string) error 72 DirExists(path string) bool 73 Reader(path string, offset int64) (io.ReadCloser, error) 74 ReadFile(path string) ([]byte, error) 75 Delete(path string) error 76 Stat(path string) (storagedriver.FileInfo, error) 77 Writer(filepath string, append bool) (storagedriver.FileWriter, error) //nolint: predeclared 78 WriteFile(filepath string, content []byte) (int, error) 79 Walk(path string, f storagedriver.WalkFn) error 80 List(fullpath string) ([]string, error) 81 Move(sourcePath string, destPath string) error 82 SameFile(path1, path2 string) bool 83 Link(src, dest string) error 84 }